Требуется ли что-либо для получения обратного вызова Quartz, кроме регистрации?

Я пытаюсь использовать CGDisplayRegisterReconfigurationCallback для получения событий реконфигурации дисплея в Quartz в Mac OS X. Вот очень простой код:

void CB(CGDirectDisplayID display,
        CGDisplayChangeSummaryFlags flags,
        void *userInfo) {
    std::cout << "In callback!" << std::endl;
}

int main (int argc, char * const argv[]) {
    std::cout << CGDisplayRegisterReconfigurationCallback(CB, NULL) << std::endl;
    std::cout << "Registered callback, sleeping..." << std::endl;
    sleep(10000000);
    return 0;
}

Однако обратный вызов не вызывается, когда я подключаю/отключаю мониторы и т. д. CGDisplayRegisterReconfigurationCallback возвращает успех.

«новичок в разработке OS X» было бы преувеличением моих базовых знаний здесь. Нужно ли создавать что-то вроде кварцевого цикла событий, чтобы обратные вызовы работали?


person Community    schedule 05.06.2009    source источник


Ответы (1)


Вам нужен какой-то цикл запуска. В стандартном приложении Cocoa или Carbon это является частью обычной обработки событий. Я думаю, что самым простым способом будет использование CFRunLoopRun.

person JWWalker    schedule 04.07.2010