2011-01-12 7 views
1

Ich füge einen Block zu einer Warteschlange (nicht die Hauptwarteschlange) mit Grand Central Dispatch. Dieser Block hat eine Schleife und zwischen jedem Durchlauf der Schleife ist eine kleine Verzögerung von 0,02 Sekunden erforderlich. Ich verwendeiphone - ist es in Ordnung, usleep auf einem sekundären Thread auf Grand Central Dispatch zu verwenden?

dispatch_async(myOwnQueue, ^{ 
    // begin loop 
    // do stuff 
    usleep(20000); 
    // end loop 
}); 

in dieser Warteschlange. Da es sich nicht um die Hauptwarteschlange handelt, wird der Hauptthread nicht blockiert.

Das Problem ist, dass Xcode klagt: Warnung: implizite Deklaration der Funktion ‚usleep‘

Gibt es andere Art und Weise, das zu tun?

danke.

+0

nicht dispatch_after eine bessere Lösung sein? – NSIntegerMax

+0

Ja, beschäftigt-warten ist nicht die Antwort. Verwenden Sie dispatch_after oder einen NSTimer oder einen dispatch_source-Timer, aber warten Sie nicht auf GCD-Threads. GCD funktioniert am besten, wenn die Arbeitsaufgaben nicht blockiert werden. – ipmcc

Antwort

3

Sie müssen nur den entsprechenden Headers vor dem Aufruf usleep():

#include <unistd.h> 
+0

ahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh Ich liebe SO und alle Experten, die es verbindet !!! Vielen Dank! – SpaceDog

Verwandte Themen