Articles of grand central dispatch

Colas de envío: cómo saber si se están ejecutando y cómo detenerlas

Solo estoy jugando con GCD y he escrito una aplicación CoinFlipper de juguete. Este es el método que arroja las monedas: – (void)flipCoins:(NSUInteger)nFlips{ // Create the queues for work dispatch_queue_t mainQueue = dispatch_get_main_queue(); dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, NULL); // Split the number of flips into whole chunks of kChunkSize and the remainder. NSUInteger numberOfWholeChunks = […]

Hace dispatch_async (dispatch_get_main_queue (), ^ {…}); esperar hasta que termine?

Tengo un escenario en mi aplicación, en el que quiero hacer una tarea que consume mucho tiempo, que consiste en algún procesamiento de datos, así como la actualización de la interfaz de usuario, en un método. Mi método se ve así, – (void)doCalculationsAndUpdateUIs { // DATA PROCESSING 1 // UI UPDATE 1 // DATA PROCESSING […]

¿Última stack de entradas y salidas con GCD?

Tengo una UITableView que muestra imágenes asociadas con contactos en cada fila. En algunos casos, estas imágenes se leen la primera vez que se visualizan desde la imagen de contacto de la libreta de direcciones, y donde no hay ninguna, se representan como un avatar en función de los datos almacenados. Actualmente tengo estas imágenes […]

Esperando hasta que finalice la tarea

¿Cómo puedo hacer que mi código espere hasta que termine la tarea en DispatchQueue? ¿Necesita un CompletionHandler o algo? func myFunction() { var a: Int? DispatchQueue.main.async { var b: Int = 3 a = b } // wait until the task finishes, then print print(a) // – this will contain nil, of course, because it […]

¿Cómo puedo recuperar un valor de retorno de un bloque de finalización?

¿Es posible ejecutar un bloque de finalización en el hilo principal? Por ejemplo, tengo un método que devuelve un valor: – (int)test { /* here one method is called with completion block with return type void */ [obj somemethodwithcompeltionblock: { /* here I am getting my Int which I want to return */ } ]; […]

¿Solución temporal en el límite de hilos en Grand Central Dispatch?

Con Grand Central Dispatch , uno puede realizar fácilmente tareas que consumen mucho tiempo en un hilo que no sea principal, evitar bloquear el thead principal y mantener la IU receptiva. Simplemente usando dispatch_async y realice la tarea en una cola simultánea global. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // code }); Sin embargo, algo suena demasiado bueno […]

Suspendiendo problema de consulta GCD

Tengo problemas para suspender una consulta gcd. Aquí hay un código que demuestra el problema: static dispatch_queue_t q=nil; static void test(int a){ if(q){ dispatch_suspend(q); dispatch_release(q); q=nil; } q=dispatch_get_global_queue(0,0); dispatch_async(q,^ { while(1){NSLog(@”query %d”,a);sleep(2);} }); } int main(int argc, const char* argv[]){ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; test(1); //blah blah blah test(2); while(1){} [pool release]; return […]

¿Cuál es la diferencia entre las llamadas síncronas y asincrónicas en Objective-C, frente a las multithreading?

Durante mucho tiempo, pensé que también era asíncrono ejecutar algo en un hilo de fondo, mientras que sincrónico significaba en el hilo principal (locking de actualizaciones e interacciones de UI). Entiendo que no ejecutar el hilo principal para acciones costosas es porque no permite que ocurran acciones de IU ya que el hilo principal está […]

¿Diferencia entre dispatch_async y dispatch_sync en cola serie?

Creé una cola en serie como esta: dispatch_queue_t _serialQueue = dispatch_queue_create(“com.example.name”, DISPATCH_QUEUE_SERIAL); ¿Cuál es la diferencia entre dispatch_async llamado así? dispatch_async(_serialQueue, ^{ /* TASK 1 */ }); dispatch_async(_serialQueue, ^{ /* TASK 2 */ }); Y dispatch_sync llamado así en esta cola en serie? dispatch_sync(_serialQueue, ^{ /* TASK 1 */ }); dispatch_sync(_serialQueue, ^{ /* TASK 2 […]

¿Puedo declarar el predicado dispatch_once_t como una variable miembro en lugar de estática?

Quiero ejecutar un bloque de código solo una vez por instancia. ¿Puedo declarar el predicado dispatch_once_t como una variable miembro en lugar de una variable estática? Desde GCD Reference , no está claro para mí. El predicado debe apuntar a una variable almacenada en el scope global o estático. El resultado de utilizar un predicado […]