C++ ObjC/C/C++;带回调的高分辨率定时器

C++ ObjC/C/C++;带回调的高分辨率定时器,c++,objective-c,c,timer,callback,C++,Objective C,C,Timer,Callback,我确信这个问题以前有人问过,所以我当然使用了搜索功能来检查是否有解决我问题的答案 然而,我所能找到的只是大量关于高精度测量时间的答案 我需要的是一个高分辨率(至少毫秒)计时器,它允许我在经过定义的时间段时触发回调。 我想在Cocoa Mac OS X应用程序中使用它,因此C/C++或Obj-C是可能的。 如果需要额外的库,那么这也很好 我发现了这一点,但它使用的是忙等待策略,我认为这会花费太多的性能 非常感谢您的帮助 你可以使用的一项伟大技术直接来自苹果。计时器调度源: 阅读它需要一段时间,但

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

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

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

我发现了这一点,但它使用的是忙等待策略,我认为这会花费太多的性能


非常感谢您的帮助

你可以使用的一项伟大技术直接来自苹果。计时器调度源:

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


它是GCD技术的一部分,基于C语言。因为Objto-C只是C加上一些加法,所以只要坚持C就更自然了。进入C++,因此Objul-C++在这种情况下看起来像是一个过大的错误。

< P>可以使用Boost定时器,< /P> ,本教程以秒为例,但您也可以使用毫秒,即使用下面的


boost::posix_time::毫秒(…)

您可以直接从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
});

我不知道Cocoa,但您应该更多地了解它的事件循环机制;它肯定会给你一些计时器或投票。。。。基本上,您应该了解如何注册超时事件回调。这个问题似乎有您的答案:(第二个答案:在OSX上,mach_绝对时间和mach_时基信息是Win32 QueryPerformance*函数的最佳等价物。)
std::This_thread::sleep_for
浮现在我脑海中(因为我昨天碰巧又碰到了它),比如,与std::milliseonds一起使用(不确定里面是否应该有“chronos”之类的,请查看)。哦,还有C++11中所有的“未来”支持。不幸的是,我没有用过它。@guitarflow你也有精度/抖动要求吗?好吧,在posix系统上用C实现这一点的传统方法是使用
timer\u create
和信号。这看起来棒极了!我不知道GCD也能做到!谢谢你的回答!这应该在搜索结果中提升,以进行精确搜索。太棒了,太棒了!谢谢我会调查的。