Почему мой CFRunLoopTimer не работает?

у меня есть CFRunLoopTimer созданный в классе C ++, как показано ниже:

#import <CoreFoundation/CoreFoundation.h>

void cClass::StartTimer()
{
if(!mActiveSenseTimer)
{
CFTimeInterval TIMER_INTERVAL = 5;
CFRunLoopTimerContext TimerContext = {0, this, NULL, NULL, NULL};
CFAbsoluteTime FireTime = CFAbsoluteTimeGetCurrent() + TIMER_INTERVAL;
mTimer = CFRunLoopTimerCreate(kCFAllocatorDefault,
FireTime,
0, 0, 0,
ActiveSenseTimerCallback,
&TimerContext);

NSLog(@"RunLoop:0x%x, TimerIsValid:%d, TimeIsNow:%f, TimerWillFireAt:%f",
CFRunLoopGetCurrent(),
CFRunLoopTimerIsValid(mActiveSenseTimer),
CFAbsoluteTimeGetCurrent(),
FireTime);
}
}

void ActiveSenseTimerCallback(CFRunLoopTimerRef timer, void *info)
{
NSLog(@"Timeout");
CFRunLoopTimerContext TimerContext;
TimerContext.version = 0;

CFRunLoopTimerGetContext(timer, &TimerContext);
((cClass *)TimerContext.info)->Timeout();
}

призвание cClass::StartTimer() приводит к следующему выводу журнала:

RunLoop: 0x7655d60, TimerIsValid: 1, TimeIsNow: 389196910.537962, TimerWillFireAt: 389196915.537956

Однако мой таймер никогда не срабатывает. Есть идеи почему?

4

Решение

Цитата из документы

Таймер должен быть добавлен в режим цикла выполнения до его срабатывания. Чтобы добавить таймер в цикл выполнения, используйте CFRunLoopAddTimer. Таймер может быть зарегистрирован только в одном цикле выполнения, хотя он может находиться в нескольких режимах в этом цикле выполнения.

Также убедитесь, что цикл запуска не сработает до срабатывания таймера.

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector