情景:

我有一个MAC应用和的launchd守护进程(与基础类写的)之间的基于分布式对象IPC。由于我对于异步消息传递(例如我有一个registerClient:服务器的根对象上,每当有一个事件服务器的根对象通知/调用客户端的代理对象的方法)前有问题,我也长轮询,这意味着从守护进程的事件/通知客户“收获”清单。这个“收获”是通过服务器对象方法调用,然后返回一个NSArray实例进行。

它工作得很好,直到几秒钟,服务器对象的进程(发起通的launchd)开始被贴上红色与它旁边的“(未响应)”的标签(活动监视器内)。就像我说的,在功能上,它工作得很好,但我们只是想摆脱这种“没有响应”的标签。

我怎样才能防止这种 “没有响应” 的标签?

仅供参考,我已经做的launchd为基础的程序之前,这是第一次做长轮询。另外,我想基于NSSocketPortNameServer的连接和同样基于NSSocketPort的广告。他们没有这个问题。锁是不是也是一个问题“怎么使用的锁只是NSCondition的,我们记录和调试程序,这似乎是唯一锁定‘的问题’是在收获的一部分,实际上,在功能上工作。此外,客户端进程被写入PyObjC而服务器进程使用ObjC写入。

预先感谢。

有帮助吗?

解决方案 3

我的问题实际上是呼吁得到使用签名FNDR一个进程的PID ...这部分导致了“没有响应”的错误,它从来就没有锁或长轮询的一部分。对不起这个家伙。但是,感谢上帝,我已经找到了答案。

其他提示

样品中的过程中找到出它正在做什么或等待。

彼得正确的做法,但你可以弄明白通过简单的检查。 “没有响应”意味着你不处理你的事件队列事件至少5秒(以前是2秒,但它调升10.4)。对于UI的过程,这将创建一个旋转的等待光标,但对于非UI过程中,你不容易看到效果。

如果这是一个基于runloop的程序,这意味着你可能在做与应与运行循环和回调(异步)来实现阻塞(同步)操作的东西。或者,你需要第二个线程来处理你的阻塞操作让你的mainthread可以继续以响应事件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top