Метод обратного вызова для запуска цикла Apple

Как добавить метод обратного вызова в прослушиватель событий Apple, например:

CFRunLoopSourceRef IOPSNotificationCreateRunLoopSource(IOPowerSourceCallbackType callback,
void *context);

Как добавить метод или блок к следующему методу, чтобы при изменении источника питания я мог регистрировать что-то вроде следующего (я вижу, что это C ++, но NSLog все еще работает в Obj-C ++) что-то вроде:

- (void)applicationDidFinishLaunching:(NSNotification *)notification
{

CFRunLoopSourceRef IOPSNotificationCreateRunLoopSource(callbackMethod(),
void *context);
}
void callbackMethod(){
//    NSLog("No power connected"); or NSLog("Power connected");
}

Я думаю, мне нужно изменить:

IOPowerSourceCallbackType callback

указатель или что-то?

0

Решение

документация не перечисляет IOPowerSourceCallbackType типа, но это объявлено в <IOKit/ps/IOPowerSources.h> заголовок как:

typedef void  (*IOPowerSourceCallbackType)(void *context);

Это означает, что вы бы определили свой обратный вызов как:

void callback(void *context)
{
// ...
}

Вы бы передать это в IOPSNotificationCreateRunLoopSource используя код как:

CFRunLoopSourceRef rls = IOPSNotificationCreateRunLoopSource(callback, whateverValueIsMeaningfulToYourCallback);
CFRunLoopAddSource(CFRunLoopGetCurrent(), rls, kCFRunLoopDefaultMode);
CFRelease(rls);

Вы хотите тщательно продумать, какой цикл выполнения вы хотите запланировать для источника и в каком режиме. Если вам нужно сделать что-то еще с источником цикла выполнения (rlsв более поздние времена, тогда не выпускайте это немедленно. Сохраните его в переменной экземпляра или что-то в этом роде и отпустите, когда закончите. В частности, вы можете сделать его недействительным, используя CFRunLoopSourceInvalidate() в какой-то момент.

0

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

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

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