2

我为 Mac 编写了一个应用程序,它被设计为状态栏项目。但是,当用户从状态栏打开菜单时,主运行循环会被阻塞,直到它关闭。由于此应用程序响应套接字上的消息,因此在菜单打开时它无法执行任何操作是一个问题。

我尝试从单独的线程设置状态项并将套接字安排在不同的线程上,但没有骰子。有什么好的方法可以解决这个问题吗?

更新:

我现在已经解决了这个问题。我使用的是NetSocket套接字包装器,它的异步特性使得在不同的线程上打开和观察变得非常困难。我切换到SmallSockets(另一个 Objective-C 套接字包装器),因为它是同步的,所以我能够打开一个套接字并直接在单独的线程上观察它。

4

1 回答 1

2

当用户与菜单交互时,运行循环以事件跟踪模式运行。将您的套接字NSEventTrackingRunLoopMode也附加到该模式,并且它们在用户与菜单交互时继续运行。

但是将套接字放在另一个线程上也应该有效。如果这对你不起作用,你可能做错了什么,但没有看到我不能说的代码。

于 2010-10-02T10:42:36.430 回答