2012-02-26 83 views
1

我見過在Win32 API中有一個sleep方法,並且還有一個延遲函數調用的定時器類。在OS X上延遲函數調用

有什麼類似的,我可以在Mac OS上使用?

我想要一個簡單的解決方案來創建在JavaScript和AS3中發現的某種setTimeout函數。

+1

我很想試試-1,因爲沒有簡單地打開終端並輸入「apropos sleep」。 – asveikau 2012-02-28 08:41:20

回答

2

CFTimer實際上存在於Core Foundation中,其中 C++ & C兼容。從我所知道的情況來看,它的記錄並不是很好。 Here is a related question that mentions it

上了一個臺階,也有不少世界sleep (I've linked the man page for you here)標準C調用,如果你想這樣做的setTimeout類型的功能,你可以想出一個方法,從一個單獨的線程做sleep,然後當它完成(沒有被殺害),考慮事情「超時」。

0

你可以用NSTimer來做到這一點。

+0

這不是C++ – Pier 2012-02-26 01:50:18

+0

糟糕。抱歉。你是對的。 CFTimer將是一個更好的選擇。 – user1118321 2012-02-26 15:49:53

0

如果您可以編寫C函數(或塊)來封裝您的C++代碼,那麼您可以使用Grand Central Dispatch

dispatch_after_f延遲呼叫功能或dispatch_after其基於塊的等效。

3

您可以通過兩種方法做到這一點:

1)的使用NSObjectperformSelector:withObject:afterDelay:

2)使用大中央調度,是這樣的:

dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, interval * NSEC_PER_SEC); 
dispatch_after(delay, dispatch_get_main_queue(), ^{ 
    your code here 
}); 

或者更短的語法,您可以將以下功能添加到項目的某個位置:

void Dispatch_AfterDelay(dispatch_queue_t queue, NSTimeInterval afterInterval, dispatch_block_t block) 
{ 
    dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, afterInterval * NSEC_PER_SEC); 
    dispatch_after(delay, queue, block); 
} 

void Dispatch_AfterDelay_ToMainThread(NSTimeInterval afterInterval, dispatch_block_t block) 
{ 
    Dispatch_AfterDelay(dispatch_get_main_queue(), afterInterval, block); 
} 

然後你只要致電:

Dispatch_AfterDelay_ToMainThread(5.0, ^{ 
    your code 
}); 
+0

NSTimeInterval?這是可可的一部分...我需要C++不客觀C. – Pier 2012-02-27 18:36:38