具有回调功能的ObjC / C / C ++高分辨率计时器

时间:2013-02-23 12:04:38

标签: c++ objective-c c timer callback

我确信之前已经问过这个问题所以我当然使用搜索功能来检查是否有解决问题的答案。

然而,我所能找到的只是高精度测量时间的答案。

我需要的是一个高分辨率(至少毫秒)的计时器,它允许我在定义的时间段过去时触发回调。 我想在Cocoa Mac OS X应用程序中使用它,因此可以使用C / C ++或Obj-C。 如果需要额外的库,那么这也没关系。

我发现了这个http://www.songho.ca/misc/timer/timer.html,但它正在使用繁忙的等待策略,而且我认为会花费太多的性能。

非常感谢帮助!

3 个答案:

答案 0 :(得分:7)

您可以使用的一项出色技术直接来自Apple。定时器调度源:

http://developer.apple.com/library/mac/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/GCDWorkQueues/GCDWorkQueues.html

阅读它需要一段时间,但一旦你得到它,它很容易使用。您可以指定以纳秒为单位的时间间隔,以及应定期执行的块。

这是GCD技术的一部分,它是基于C的。由于Objective-C只是C加上一些补充,因此坚持使用C似乎更自然。因此,在这种情况下,Objective-C ++似乎有些过分。

答案 1 :(得分:7)

您可以直接从Apple使用GCD。在Mac OS X上,GCD自v10.7起可用。

double delayInMilliseconds = 100.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInMilliseconds * NSEC_PER_MSEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    // callback invocation
});

答案 2 :(得分:1)

可能你可以使用提升计时器,

http://www.boost.org/doc/libs/1_40_0/doc/html/boost_asio/tutorial/tuttimer2.html,教程举例说明秒,但你也可以使用毫秒,即使用下面的..

升压::了posix_time ::毫秒(...)