我創建了一個CGEventTap這樣的:CFRunLoopRunInMode與代碼1退出,因爲如果不添加任何物質
GetCurrentProcess(psn);
var mask = 1 << kCGEventLeftMouseDown | // CGEventMaskBit(kCGEventLeftMouseDown)
1 << kCGEventLeftMouseUp |
1 << kCGEventRightMouseDown |
1 << kCGEventRightMouseUp |
1 << kCGEventOtherMouseDown |
1 << kCGEventOtherMouseUp |
1 << kCGEventScrollWheel;
mouseEventTap = CGEventTapCreateForPSN(&psn, kCGHeadInsertEventTap, kCGEventTapOptionDefault, mask, null);
if (!mouseEventTap.isNull()) {
aRLS = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, mouseEventTap, 0);
CFRelease(mouseEventTap);
if (!aRLS.isNull()) {
aLoop = CFRunLoopGetCurrent();
CFRunLoopAddSource(aLoop, aRLS, kCFRunLoopCommonModes);
CFRelease(aRLS);
CFRelease(aLoop);
rez = CFRunLoopRunInMode(ostypes.CONST.kCFRunLoopCommonModes, 10, false); // figure out how to make this run indefinitely
// rez is 1 :(
}
}
我CFRunLoopRun
立即退出,而不是持續10秒運行。它說代碼是1,這意味着沒有來源處於該模式。但我清楚地做了CFRunLoopAddSource
共同模式選項kCFRunLoopRunFinished. The run loop mode mode has no sources or timers.
。任何人都知道最新情況?這是在非主線程。
不應該把runloop代碼放在'do while'中嗎? 我不是專家,但當我與runloops搞砸我來到這樣的東西http://stackoverflow.com/questions/33064115/obj-c-configure-run-loop-for-nsdistributionnotificationcenter – ColdSteel
謝謝@ user3351949是的,我應該對於'CFRunLoopRunInMode',因爲它有一個區間。如果我使用'CFRunLoopRun',我不會無限期地運行。但是我需要'CFRunLoopRunInMode',因爲我需要它在'kCFRunLoopCommonModes'模式下運行,我不認爲我們可以用'CFRunLoopRun'在該模式下無限期地運行,但是如果我們能做到這一點,那將是最好的。但是我沒有這樣的情況,因爲我只是測試循環是否持續了10秒,因爲那是間隔時間,但是它並沒有那麼強大,它仍然以代碼「1」退出,認爲它有沒有來源。 – Noitidart
你是否擁有aLoop,你必須發佈它嗎? – Willeke