【问题标题】:StatusItem menu blocks main thread when it's opened. Workaround?StatusItem 菜单在打开时会阻塞主线程。解决方法?
【发布时间】:2010-10-02 03:45:16
【问题描述】:

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

我尝试从单独的线程设置状态项并将套接字调度到不同的线程,但没有骰子。有什么好办法解决吗?

更新:

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

【问题讨论】:

    标签: objective-c macos nsthread nsrunloop


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-16
      • 1970-01-01
      相关资源
      最近更新 更多