5.3 CFRunLoopSourceRef (输入源)
CFRunLoopSourceRef 是事件产生的地方。Source有两个版本:Source0 和 Source1。
数据结构(source0/source1):
// source0 (manual): order(优先级),callout(回调函数)
CFRunLoopSource {order =..., {callout =... }}
// source1 (mach port):order(优先级),port:(端口), callout(回调函数)
CFRunLoopSource {order = ..., {port = ..., callout =...}
-
Source0:只包含了一个回调(函数指针),它并不能主动触发事件。使用时,你需要先调用 CFRunLoopSourceSignal(source),将这个 Source 标记为待处理,然后手动调用 CFRunLoopWakeUp(runloop) 来唤醒 RunLoop,让其处理这个事件。
-
Source1:包含了一个 mach_port 和一个回调(函数指针),被用于通过内核和其他线程相互发送消息。这种 Source 能主动唤醒 RunLoop 的线程,其原理在下面会讲到。
作者:小码僧
链接:https://www.jianshu.com/p/07313bc6fd24
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。