Pull to refresh

Comments 9

А вы уверены, что можно вызывать CFRunLoopStop() из обработчика сигнала? Я бы не стал.

Хорошая статья, единственно что — местами слегка сумбурно из-за того, что кроме IOKit вам по ходу дела приходится рассказывать еще и про CoreFoundation.

На счет «виртуальных портов» — IONotificationPortRef, io_iterator_t и прочее — весьма тонкая обертка вокруг Mach порта.
На счет IOServiceMatching и словаря — дело в том, что в Mac OS X многие интерфейсы используют композицию объектов из CoreFoundation (массивы, словари, строки, числа и тд.) в качестве представления передаваемых данных. Одна из причин — халявная расширяемость и маршаллинг.

Это как в вебе для общения сервисов между собой или браузера с сервером используется JSON, аналогия 1-1.
Спасибо за замечания. Да действительно, местами возможно немного запутанно и сумбурно, т.к. используя объекты CoreFoundation не мог не упомянуть что это такое и откуда. Про Mach порты уже не стал даже упоминать, что бы еще сильнее не уйти в сторону и не запутать читателей.
По поводу обработчика сигнала тоже соглашусь, идея не очень хорошая, но в данном простом примере решил поступить именно таким, как наиболее простым и наглядным, образом.
Пожалуй добавлю информацию в статью, что в реальных проектах так делать не стоит.
Судя по исходникам, cfrunloopstop перво-наперво лочит rl. Так что это точно не async-signal safe.
void CFRunLoopStop(CFRunLoopRef rl) {
    Boolean doWake = false;
    CHECK_FOR_FORK();
    __CFRunLoopLock(rl);
    if (rl->_currentMode) {
        __CFRunLoopSetStopped(rl);
        doWake = true;
    }
    __CFRunLoopUnlock(rl);
    if (doWake) {
        CFRunLoopWakeUp(rl);
    }
}

Каноническое решение кстати — получать нотификации о сигналах через kqueue, которая добавляется в runloop обернутая в CFFileDescriptor.
UFO just landed and posted this here
Стояла задача познакомить читателя с нативным инструментарием MacOS X.
UFO just landed and posted this here
А попробуйте явно включить заголовочный файл, где объявлен CFNumberRef

#include <CoreFoundation/CoreFoundation.h>
UFO just landed and posted this here
Sign up to leave a comment.

Articles