2009-09-23 163 views
9

我在我的應用程序中實現了以下功能。替代睡眠功能

for(i=0;!stopThroughButtons && i<totalMovements;i++){ 
     [NSThread detachNewThreadSelector:@selector(moveNeedle) toTarget:self withObject:nil]; 
     sleep(0.3); 
    } 

這裏sleepunsigned int類型的自變量的函數。

睡眠方法使用秒睡覺。

我想給出以毫秒爲單位進行睡眠的時間。

哪個最佳備用可用?

+0

sleep()是錯誤的答案。見下文。 – bbum 2009-09-24 17:11:51

+0

好的。但現在我已經從我的邏輯中刪除了睡眠,並使用了計時器而不是睡眠和線程。好@bbum。你的評論讓我注意到了這一點。 – 2009-09-24 22:22:34

回答

33
+0

優秀的。偉大的知識。 – 2009-09-23 18:54:03

+0

終於我實現了這一點。 & 有用。 爲(I = 0;!stopThroughButtons && I = 9) \t \t \t \t中斷; \t \t \t [NSThread detachNewThreadSelector:@selector(moveNeedle)toTarget:self withObject:nil]; \t \t \t usleep(200000); \t \t} – 2009-09-23 18:56:44

+3

請參閱下面的cdespinosa的答案。使用sleep()幾乎總是錯誤的答案。 – bbum 2009-09-24 06:04:46

3

您可能需要nanosleep()而不是納秒。請記住,這些睡眠時間並不準確,所以你真正擁有的是能夠比百分之幾秒更精確地指定它。

+0

nanosleep(<#const struct timespec *#>,<#struct timespec *#>) 先生,請您告訴我,作爲參數傳遞什麼? – 2009-09-23 18:52:42

33

還有NSThread的+ sleepForTimeInterval:,這需要時間的分數秒。例如:

[NSThread sleepForTimeInterval:0.05]; 

應該睡50毫秒。

+0

謝謝。這將持續50毫秒的主線程。 :) – 2015-09-14 06:28:52

16

正如您在其他線程中提到的那樣,您可能不想在主線程中休眠,因爲這會阻止事件傳遞並凍結UI。除了循環和睡眠之外,您可能還想啓動計時器並在計時器啓動時執行您的操作。

+1

+1,睡覺幾乎總是做錯事 – 2009-09-24 04:00:43

+0

好的。但現在我已經從我的邏輯中刪除了睡眠,並使用了計時器而不是睡眠和線程。好@bbum。你的評論讓我注意到了這一點。 – 2009-09-24 22:23:05

+0

在UI測試中,睡眠方法可能很有用,因爲測試應用程序在與測試應用程序不同的進程上運行。 – user3426913 2015-12-22 00:10:11