5

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

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

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

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

非常感谢您的帮助!

4

3 回答 3

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
});
于 2013-02-23T13:03:04.527 回答
7

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

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

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

它是 GCD 技术的一部分,它是基于 C 的。由于 Objective-C 只是 C 加上一些附加内容,因此坚持使用 C 似乎更自然。进入 C++,因此在这种情况下,Objective-C++ 似乎是一种矫枉过正。

于 2013-02-23T12:14:57.867 回答
1

也许你可以使用加速计时器,

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

boost::posix_time::毫秒(...)

于 2013-02-23T12:19:59.997 回答