延迟OS X上的函数调用

时间:2012-02-26 01:46:16

标签: c++ macos

我已经看到Win32 API中有一个sleep方法,还有一个延迟函数调用的计时器类。

我可以在Mac OS上使用类似的东西吗?

我想要一个简单的解决方案来创建JavaScript和AS3中的某种setTimeout函数。

5 个答案:

答案 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)

你可以看看像sleep()poll()这样的Unix调用。