我見過在Win32 API中有一個sleep方法,並且還有一個延遲函數調用的定時器類。在OS X上延遲函數調用
有什麼類似的,我可以在Mac OS上使用?
我想要一個簡單的解決方案來創建在JavaScript和AS3中發現的某種setTimeout
函數。
我見過在Win32 API中有一個sleep方法,並且還有一個延遲函數調用的定時器類。在OS X上延遲函數調用
有什麼類似的,我可以在Mac OS上使用?
我想要一個簡單的解決方案來創建在JavaScript和AS3中發現的某種setTimeout
函數。
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
,然後當它完成(沒有被殺害),考慮事情「超時」。
你可以用NSTimer來做到這一點。
這不是C++ – Pier 2012-02-26 01:50:18
糟糕。抱歉。你是對的。 CFTimer將是一個更好的選擇。 – user1118321 2012-02-26 15:49:53
如果您可以編寫C函數(或塊)來封裝您的C++代碼,那麼您可以使用Grand Central Dispatch。
看dispatch_after_f
延遲呼叫功能或dispatch_after
其基於塊的等效。
您可以通過兩種方法做到這一點:
1)的使用NSObject
performSelector: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
});
NSTimeInterval?這是可可的一部分...我需要C++不客觀C. – Pier 2012-02-27 18:36:38
我很想試試-1,因爲沒有簡單地打開終端並輸入「apropos sleep」。 – asveikau 2012-02-28 08:41:20