我已经看到Win32 API中有一个sleep方法,还有一个延迟函数调用的计时器类。
我可以在Mac OS上使用类似的东西吗?
我想要一个简单的解决方案来创建JavaScript和AS3中的某种setTimeout
函数。
答案 0 :(得分:4)
您可以使用两种方法来实现:
1)使用NSObject
的{{1}}
2)使用Grand Central Dispatch,如下所示:
performSelector:withObject:afterDelay:
或者,对于较短的语法,您可以在项目的某处添加以下功能:
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);
}
答案 1 :(得分: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
类型的函数执行此操作,您可以找到一种方法{{1}从一个单独的线程,然后当它完成(没有被杀死)时,考虑事情“超时”。
答案 2 :(得分:0)
您可以使用NSTimer。
执行此操作答案 3 :(得分:0)
如果您可以编写C函数(或块)来包装C ++代码,那么您可以使用Grand Central Dispatch。
查看dispatch_after_f
延迟调用某个函数,或dispatch_after
查看其基于块的等效函数。
答案 4 :(得分:0)