Objective c 在Cocoa应用程序上调用CFRunLoop族
我有一个cocoa应用程序,我想在其中使用UNIX域套接字与系统范围的守护进程通信 在第一步中,我的客户端将连接到守护进程,然后侦听来自守护进程的传入日志语句 我发现的示例是来自Apple的CFLocalServer,它使用Objective c 在Cocoa应用程序上调用CFRunLoop族,objective-c,cocoa,sockets,core-foundation,Objective C,Cocoa,Sockets,Core Foundation,我有一个cocoa应用程序,我想在其中使用UNIX域套接字与系统范围的守护进程通信 在第一步中,我的客户端将连接到守护进程,然后侦听来自守护进程的传入日志语句 我发现的示例是来自Apple的CFLocalServer,它使用CFSockets在两个命令行实用程序之间进行通信。我能够很好地设置代码的守护程序部分,因为我可以自由决定在我的守护程序中调用什么函数([[nsrunlop currentLoop]run]或CFRunLoopRun())。但是,我对客户端有疑问,它是一个cocoa应用程序
CFSockets
在两个命令行实用程序之间进行通信。我能够很好地设置代码的守护程序部分,因为我可以自由决定在我的守护程序中调用什么函数([[nsrunlop currentLoop]run]
或CFRunLoopRun()
)。但是,我对客户端有疑问,它是一个cocoa应用程序
在代码示例中,客户机首先创建它们,连接它们,将它们作为源添加到当前的CFRunLoop
进行侦听操作,然后调用CFRunLoopRun()代码>直到被CFRunLoopStop(CFRunLoopGetCurrent())取消代码>
我的问题是:我是否可以在Objective-C cocoa应用程序创建的串行调度队列的块内执行所有这些操作,而不干扰我的应用程序主线程中的nsrunlop?是的,您可以这样做,尽管您可能只需要将套接字连接到主运行循环并让它正常运行(即,不要调用CFRunLoopRun()
,因为它已经在运行)
如果您的需求很复杂,我还想看看哪一个是非常好的包装器,适合所有此类工作。它目前不支持unix域套接字,但您可以使用它添加它。谢谢您的回答。如何将套接字附加到cocoa应用程序中的主运行循环?假设我在appli中执行代码当应用程序完成启动时(因此我在主线程上)。就像现在一样,只需使用CFRunLoopGetMain()
。我假设您已经调用了CFSocketCreateRunLoopSource()
和CFRunLoopAddSource()
。只需将其添加到主循环,而不是其他循环。