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毫秒不是,短。