2011-07-06 14 views
7

Quiero crear dos colas en serie A & B. Donde la cola B es un destino de la cola A. Quiero poner en cola algunos bloques en B, y suspenderlo hasta que esté listo para ejecutarlos, sin embargo, quiero continuar ejecutar bloques en la cola A.¿La suspensión de una cola de envío suspende su cola de destino?

Si suspendo B, ¿esto también suspenderá su cola de destino (cola A)?

Mi pensamiento es que quiero programar estos bloques en particular (en la cola B) para su ejecución en una fecha posterior (no especificada), sin embargo, no quiero que se ejecuten simultáneamente (esto implica Core Data^_ ^) y No quiero lidiar con semáforos. Pero quiero cola de A a seguir procesando Es bloques, mientras que B se suspende

En caso de que no estaba claro aquí algunos ejemplos de código

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); 

Respuesta

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

queueB se suspende, pero queueA no se suspende.

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

queueA y queueB están suspendidos.