2013-08-01 4 views
19

W wielu miejscach w mojej aplikacji używam następny kod do wykonywania zadań w tle i powiadamia główny wątek:utworzyć niestandardowy sekwencyjną globalnej wysyłki kolejkę

dispatch_queue_t backgroundQueue = dispatch_queue_create("dispatch_queue_#1", 0); 
    dispatch_async(backgroundQueue, ^{ 

    dispatch_async(dispatch_get_main_queue(), ^{ 


     }); 
    }); 

to możliwe, aby stworzyć backgroundQueue w jednym miejscu (gdzie robi najlepszy sposób?) i użyć go później? Wiem o globalnej kolejce systemowej, ale zamówienie jest dla mnie ważne.

Odpowiedz

34

Coś jak to powinno działać prawidłowo:

dispatch_queue_t backgroundQueue() { 
    static dispatch_once_t queueCreationGuard; 
    static dispatch_queue_t queue; 
    dispatch_once(&queueCreationGuard, ^{ 
     queue = dispatch_queue_create("com.something.myapp.backgroundQueue", 0); 
    }); 
    return queue; 
} 
+0

Czy możesz dodać przykład użycia? – pvllnspk

+0

Oczywiście: dispatch_async (backgroundQueue(),^{NSLog (@ "Zalogowałem się w tle kolejki!"}}; –

+0

nie mogę skompilować kodu w odpowiedzi – pvllnspk

0

Można też nam NSOperationQueue i popchnąć operacji do niego. Aby upewnić się, że operacje nie kończą się, można ustawić wartość dla opcji Bieżący prąd na NIE.

+0

to nie moja sprawa – pvllnspk

-5
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
       //back ground thread 

       dispatch_async(dispatch_get_main_queue(), ^{ 
        // main thread 
         }); 
       }); 
0
queue = dispatch_queue_create("com.something.myapp.backgroundQueue", 0); 

poprzedzający seryjny kolejce, jeśli chcesz utworzyć kolejkę współbieżne, można użyć DISPATCH_QUEUE_CONCURRENT.

W systemie iOS 5 i nowszych użytkownik może samodzielnie tworzyć równoczesne kolejek wysyłki, podając DISPATCH_QUEUE_CONCURRENT jako typ kolejki.

dispatch_queue_t queue = dispatch_queue_create("downLoadAGroupPhoto", 
                DISPATCH_QUEUE_CONCURRENT);