如何以编程方式检测到Mac应用程序已“陷入困境”?

Chr*_*s R 2 macos user-interface

我想创建一个应用程序,该应用程序将监视在我的计算机上运行的应用程序,并对应用程序堆积如山的情况做出响应。是否有可能(使用各种OSX编程工具中的任何一个,我将自学使用Objective-C)来检测是否发生了这种情况?如果是这样,有人可以给我一个简短的代码示例吗?

Kev*_*ose 5

恐怕我没有涉及的实际类或函数,但是我可以给您一个大概的过程。

首先,了解每个应用程序(也许每个窗口)都有一个支持它的事件队列。每个线程都由一个线程提供服务,该线程仅将事件*从队列中弹出,进行一些处理,然后返回以等待下一个事件。当事件队列的服务速度不够快时,就会出现“沙滩球”(由系统强制)。“冻结”事件队列表示过去响应某个事件时,应用程序已锁定。

现在-在调试上下文之外-您不应该能够进入另一个应用程序并弄弄线程的事件队列来查看其是否得到服务。 但是,您可以做的是定期发布一个会导致非法响应的事件,如果该响应没有到来,您就会知道该应用程序已“锁定”。

这构成了轮询,因此请注意性能影响。

*事件是诸如按下键,按下键,移动鼠标,重画等。