我正在使用 CFMessagePort
在基于 AppKit 的应用程序中进行进程间通信,并将 CFMessagePort
源添加到当前运行循环。
CFMessagePortRef local = CFMessagePortCreateLocal( kCFAllocatorDefault, daemonHostName,didReceiveDataFromOtherProcess, NULL,false);
if (local) {
CFRunLoopSourceRef source = CFMessagePortCreateRunLoopSource(NULL, local, 0);
CFRunLoopRef rl = [[NSRunLoop mainRunLoop] getCFRunLoop];
CFRunLoopAddSource(rl, source, kCFRunLoopDefaultMode);
}
- 这是正确的做法吗?
- 我应该使用
CFRunLoopRun()
运行 runloop 吗? - 这是否会影响我的主要应用程序操作(如果客户会 每 1 秒发送一次消息)?
最佳答案
我没发现有什么问题。
我从您的评论中得知您正在使用自动运行的主运行循环,因此答案是否定的。如果您没有创建运行循环,那么您绝对不需要运行它。
每秒一次根本不是问题。但是,如果
didReceiveDataFromOtherProcess()
回调需要大量时间来运行,您的界面响应速度将会降低。在这种情况下,创建一个具有自己的运行循环的辅助线程将会有所帮助。如果您不确定,请在遇到此问题之前不要担心。
附注添加源后应该释放它,因为它已被运行循环保留。
关于objective-c - 向主运行循环添加源是否会影响主应用程序操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8998648/