В настоящее время я использую addLocalMonitorForEventsMatchingMask для отслеживания событий мыши, и я называю это из основного потока. Он отлично работает. Однако теперь я хочу переместить его в основной поток. Есть ли альтернатива, вроде создания скрытого окна из потока и выполнения NSRunLoop
?addLocalMonitorForEventsMatchingMask Альтернатива для Off-mainthread
Я прочитал на документы: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/EventOverview/MonitoringEvents/MonitoringEvents.html
обработчики всегда вызываются в основном потоке. Оба метода класса возвращают объект-монитор, который вызывающий объект не имеет (и, следовательно, ему не нужно сохранять или освобождать).
Есть ли альтернатива, которую я могу сделать с главной темы?
Я не могу настроить обратные вызовы на mainthread из другого потока. Я использую FFI и не способен на это прямо сейчас.
Вот мой код в случае это помогает, но я надеюсь на это альтернатива для отключения основного потока пожалуйста:
myHandler_js = function(c_arg1__self, objc_arg1__aNSEventPtr) {
var cType = ostypes.API('objc_msgSend')(objc_arg1__aNSEventPtr, ostypes.HELPER.sel('type'));
cType = ctypes.cast(cType, ostypes.TYPE.NSEventType);
return objc_arg1__aNSEventPtr; // return null to block
};
myHandler_c = ostypes.TYPE.IMP_for_EventMonitorCallback.ptr(myHandler_js);
myBlock_c = ostypes.HELPER.createBlock(myHandler_c);
var rez_add = ostypes.API('objc_msgSend')(ostypes.HELPER.class('NSEvent'), ostypes.HELPER.sel('addLocalMonitorForEventsMatchingMask:handler:'), ostypes.TYPE.NSEventMask(ostypes.CONST.NSKeyDownMask), myBlock_c.address());