0
我想在OSX上每N毫秒(理想情况下为1)获得一个回调。我已经成立了一个CFRunLoop
,然后添加一个定时器,像这样:OSX上的定时器回调
const double period = 0.001;
CFAbsoluteTime now = CFAbsoluteTimeGetCurrent();
CFRunLoopTimerContext context;
std::memset(&context, 0, sizeof(context));
context.info = ...;
CFRunLoopTimerRef timerRef = CFRunLoopTimerCreate(kCFAllocatorDefault, now + period, period, 0, 0, RunLoopTimerCallBack, &context);
// Add it to the loop.
CFRunLoopAddTimer(/* my run loop reference */, timerRef, kCFRunLoopDefaultMode);
看来工作 - 我RunLoopTimerCallback()
被称为大约每毫秒。除非没有。 documentation for CFRunLoopTimerCreate
说:
如果存在实施原因,则可以通过计时器稍微调整间隔的精确度(最多亚毫秒)。
所以我期待它或多或少地工作,但在实践中,我得到了8毫秒的回调之间的延迟:
我试过setting the run loop thread to real-time priority,但它并没有任何差异。有没有人有任何想法,为什么我会得到这些延误?我意识到这是推动操作系统相当辛苦,也许这是一些调度的事情,但仍然... 1毫秒不是,短。