Sospensione del problema di query GCD

Ho problemi a sospendere una query gcd. Ecco un codice che dimostra il 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 0; } 

Quello che sto cercando di fare è sospendere, rilasciare e reinizializzare la query q quando il test di funzione viene chiamato la seconda volta, ma apparentemente il mio codice è sbagliato ed entrambe le istanze della query q continuano a essere eseguite.

Il tuo aiuto è molto apprezzato, grazie.