2016-06-30 22 views
16

per favore qualcuno mi dica come usare sleep() per pochi millisecondi in 2.2 veloci?Come dormire per pochi millisecondi in 2.2 veloci?

while (true){ 
    print("sleep for 0.002 seconds.") 
    sleep(0.002) // not working 
} 

ma

while (true){ 
    print("sleep for 2 seconds.") 
    sleep(2) // working 
} 

si sta lavorando.

+1

sonno filettatura o cedere è valida nel caso di polling, per uno. Molte interfacce non offrono notifiche, quindi è necessario verificare ogni tanto per una modifica asincrona che è imminente. Per fare ciò senza mettere in pausa il thread tra i controlli molesterà inutilmente la CPU e probabilmente bloccherà il processo che stai aspettando. – absmiths

+0

sleep() richiede ** int ** come parametro. Quindi dormire (0.002) dormirà 0 secondi. Usa usleep (nanosecondi) invece –

risposta

32

usleep() prende milionesimi di secondo

usleep(1000000) //will sleep for 1 second 
usleep(2000) //will sleep for .002 seconds 

O

let ms: UInt32 = 1000 
usleep(2 * ms) //will sleep for 2 milliseconds (.002 seconds) 

O

let second: UInt32 = 1000000 
usleep(UInt32(0.002) * second) //will sleep for 2 milliseconds (.002 seconds) 
8

uso func usleep(_: useconds_t) -> Int32 (importazione Darwin o Foundation ...)

+1

usleep() richiede milionesimi di secondo, quindi usleep (1000000) dormirà per 1 secondo – Harris

2

Se avete veramente bisogno di dormire, provare usleep come suggerito in @ di user3441734 risposta.

Tuttavia, si potrebbe voler considerare se il sonno è l'opzione migliore: è come un pulsante di pausa e l'app sarà bloccata e non risponde mentre è in esecuzione.

Si potrebbe desiderare di utilizzare NSTimer.

//Declare the timer 
var timer = NSTimer.scheduledTimerWithTimeInterval(0.002, target: self, selector: #selector(MyClass.update), userInfo: nil, repeats: true) 
self, selector: "update", userInfo: nil, repeats: true) 



func update() { 
    // Code here 
} 
+0

a volte è una buona idea "mettere in pausa" qualche attività in background per un po '... e dormire e dormire potrebbe essere molto utile, facile da adottare e soluzione economica. sfortunatamente, è molto raro vedere l'uso corretto del sonno o del sonno. in generale, è meglio evitarlo :-) – user3441734

+0

Congelerebbe l'app solo se hai messo in pausa il thread dell'evento, che è sempre una pessima idea. Il lavoro diverso dall'interfaccia utente dovrebbe essere fatto fuori da quel thread comunque. L'uso normale di usleep causa solo il blocco corrente da bloccare. – absmiths

+0

Eh, è molto probabilmente un brutto segno se chiami 'usleep' in una parte di alto livello della tua app. Può bloccare le code GCD, per esempio. Usalo solo se le astrazioni che Apple fornisce _really_ non sono adatte a ciò che devi fare. – sudo