web-dev-qa-db-ja.com

Swift 2.2で数ミリ秒スリープする方法

誰でもSwift 2.2で数ミリ秒のsleep()の使用方法を教えてください。

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

しかし

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

それは働いています。

39
sulabh qg

usleep()は100分の1秒かかります

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

OR

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

OR

let second: Double = 1000000
usleep(useconds_t(0.002 * second)) //will sleep for 2 milliseconds (.002 seconds)
77
Harris

func usleep(_: useconds_t) -> Int32を使用(インポートDarwinまたはFoundation ...)

8
user3441734

本当にスリープする必要がある場合は、@ user3441734の回答で提案されているusleepを試してください。

ただし、スリープが最適なオプションであるかどうかを検討することをお勧めします。スリープボタンのようなもので、実行中にアプリがフリーズして応答しなくなります。

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
}
4
rocket101

代わりに:

DispatchQueue.main.asyncAfter(deadline: .now() + 0.002) {
   /*Do something after 0.002 seconds have passed*/
}
1
eonist

Usleepのノンブロッキングソリューション:

DispatchQueue.global(qos: .background).async {
    let second: Double = 1000000
    usleep(useconds_t(0.002 * second)) 
    print("Active after 0.002 sec, and doesn't block main")
    DispatchQueue.main.async{
        //do stuff in the main thread here
    }
}
1
eonist