2011-07-06 10 views
7

Chcę utworzyć dwie kolejki szeregowe A & B. W przypadku, gdy kolejka B jest celem kolejki A. Chcę umieścić w kolejce niektóre bloki na B i zawiesić je, dopóki nie będę gotowy do ich wykonania, jednak chcę kontynuować wykonywanie bloków w kolejce A.Czy zawieszenie kolejki wysyłkowej zawiesza kolejkę docelową?

Czy zawieszenie B spowoduje zawieszenie kolejki docelowej (kolejka A)?

Moim zdaniem jest to, że chcę zaplanować te bloki (w kolejce B) do wykonania w późniejszej (nieokreślonej) dacie, jednak nie chcę, aby kiedykolwiek działały jednocześnie (dotyczy to danych podstawowych^_ ^) i nie chcę zajmować się semaforami. Ale chcę Kolejka A do dalszego przetwarzania jest to bloki, podczas gdy B jest zawieszony

W przypadku, że nie było jasne, oto przykładowy kod

dispatch_queue_t queueA = dispatch_queue_create("app.queue.A"); 
dispatch_queue_t queueB = dispatch_queue_create("app.queue.B"); 

dispatch_set_target_queue(queueB, queueA); 

dispatch_suspend(queueB); 
/* 
* Add a bunch of blocks to queue B or A 
* Where the ones added to A should execute immediately 
*/ 


//Wait till blocks on queue A have finished and start up B 
dispatch_resume(queueB); 

dispatch_release(queueA); 
dispatch_release(queueB); 

Odpowiedz

12
dispatch_set_target_queue(queueB, queueA); 
dispatch_suspend(queueB); 

queueB jest zawieszony, ale queueA nie jest zawieszony.

dispatch_set_target_queue(queueB, queueA); 
dispatch_suspend(queueA); 

Kolejka A i kolejkaB są zawieszone.

Powiązane problemy