在我的應用我添加CFMachPortRef(通過CFMachPortCreateRunLoopSource)的線程CFRunLoopGCD和RunLoops
現在,我問我自己,可以在此使用GCD做?比方說,而不是產卵我自己NSThread並通過CFRunLoopAddSource事件端口添加創建CFRunLoopSourceRef它的運行循環,增加調度的runloop?
我認爲這很可能不起作用,因爲GCD的內部工作原理,但我真的不知道。
更新
我得到這個至今,但沒有回調函數的事件自來水也沒有dispatch_source_event_handler塊被調用。有任何想法嗎?
CFMachPortRef port = CGEventTapCreate(kCGSessionEventTap,
kCGHeadInsertEventTap,
opts,
desc_.eventMask,
_CGEventCallback,
self);
// create dispatch source
dispatch_source_t source = dispatch_source_create(DISPATCH_SOURCE_TYPE_MACH_RECV,
CFMachPortGetPort(port),
0,
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0));
// set event handler
dispatch_source_set_event_handler(source, ^{
printf("handle me!\n");
});
dispatch_resume(source);
'CFMachPort'結合了Mach端口和回調。如果您使用GCD來監控Mach端口,則忽略回調。在事件點擊的情況下,回調在Core Graphics內部,大概是很重要的東西(例如接收來自端口的Mach消息,解碼並調用* your * callback)。 – 2016-03-13 21:50:40