Guest User

Untitled

a guest
Jan 22nd, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.08 KB | None | 0 0
  1. @implementation PullProcessObject
  2. @synthesize delegate;
  3.  
  4.  
  5. - (id)init;
  6. {
  7. if (!(self = [super init])) {
  8. return nil;
  9. }
  10.  
  11. mPullQueue = dispatch_queue_create(NULL, 0);
  12. mProcQueue = dispatch_queue_create(NULL, 0);
  13.  
  14. return self;
  15. }
  16.  
  17.  
  18.  
  19. - (void)dealloc
  20. {
  21. dispatch_release(mPullQueue);
  22. dispatch_release(mProcQueue);
  23. [super dealloc];
  24. }
  25.  
  26.  
  27.  
  28.  
  29. - (void)doPull:(dispatch_semaphore_t)prevSem
  30. {
  31. dispatch_async(mPullQueue, ^{
  32. id result = [delegate pull];
  33.  
  34. if (result) {
  35. dispatch_semaphore_t sem = dispatch_semaphore_create(0);
  36.  
  37.  
  38. dispatch_async(mProcQueue, ^{
  39. [delegate process:result];
  40. dispatch_semaphore_signal(sem);
  41. });
  42.  
  43.  
  44. dispatch_async(mPullQueue, ^{
  45. if (prevSem) {
  46. dispatch_semaphore_wait(prevSem, DISPATCH_TIME_FOREVER);
  47. dispatch_release(prevSem);
  48. }
  49.  
  50. [self doPull:sem];
  51. });
  52.  
  53.  
  54. } else {
  55.  
  56. if (prevSem) {
  57. dispatch_semaphore_wait(prevSem, DISPATCH_TIME_FOREVER);
  58. dispatch_release(prevSem);
  59. }
  60.  
  61. dispatch_async(mProcQueue, ^{
  62. [delegate done];
  63. });
  64.  
  65. }
  66. });
  67. }
  68.  
  69.  
  70.  
  71.  
  72. - (void)start
  73. {
  74. [self doPull:nil];
  75. }
  76.  
  77.  
  78. @end
Add Comment
Please, Sign In to add comment