Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在Cocoa应用程序上调用CFRunLoop族_Objective C_Cocoa_Sockets_Core Foundation - Fatal编程技术网

Objective c 在Cocoa应用程序上调用CFRunLoop族

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应用程序

我有一个cocoa应用程序,我想在其中使用UNIX域套接字与系统范围的守护进程通信

在第一步中,我的客户端将连接到守护进程,然后侦听来自守护进程的传入日志语句

我发现的示例是来自Apple的CFLocalServer,它使用
CFSockets
在两个命令行实用程序之间进行通信。我能够很好地设置代码的守护程序部分,因为我可以自由决定在我的守护程序中调用什么函数(
[[nsrunlop currentLoop]run]
CFRunLoopRun()
)。但是,我对客户端有疑问,它是一个cocoa应用程序

在代码示例中,客户机首先创建它们,连接它们,将它们作为源添加到当前的
CFRunLoop
进行侦听操作,然后调用
CFRunLoopRun()直到被
CFRunLoopStop(CFRunLoopGetCurrent())取消


我的问题是:我是否可以在Objective-C cocoa应用程序创建的串行调度队列的块内执行所有这些操作,而不干扰我的应用程序主线程中的nsrunlop?

是的,您可以这样做,尽管您可能只需要将套接字连接到主运行循环并让它正常运行(即,不要调用
CFRunLoopRun()
,因为它已经在运行)


如果您的需求很复杂,我还想看看哪一个是非常好的包装器,适合所有此类工作。它目前不支持unix域套接字,但您可以使用它添加它。

谢谢您的回答。如何将套接字附加到cocoa应用程序中的主运行循环?假设我在appli中执行代码当应用程序完成启动时(因此我在主线程上)。就像现在一样,只需使用
CFRunLoopGetMain()
。我假设您已经调用了
CFSocketCreateRunLoopSource()
CFRunLoopAddSource()
。只需将其添加到主循环,而不是其他循环。