2

ステータス バー アイテムとして設計された Mac 用のアプリを作成しました。ただし、ユーザーがステータス バーからメニューを開くと、メインの実行ループは閉じられるまでブロックされます。このアプリはソケット上のメッセージに応答するため、メニューが開いている間は何もできないのが問題です。

別のスレッドからステータス項目を設定し、別のスレッドでソケットをスケジュールしようとしましたが、サイコロはありません。これに対処する良い方法はありますか?

アップデート:

これで解決しました。私はNetSocketソケット ラッパーを使用していましたが、その非同期性により、別のスレッドを開いて監視することが非常に困難でした。私はSmallSockets (別の Objective-C ソケット ラッパー) に切り替えました。これは同期であるため、ソケットを開いて別のスレッドで直接監視することができました。

4

1 に答える 1

2

ユーザーがメニューを操作している間、実行ループはイベント追跡モードで実行されます。ソケットもNSEventTrackingRunLoopModeモードに接続すると、ユーザーがメニューを操作している間もソケットが実行され続けます。

ただし、ソケットを別のスレッドに配置しても機能するはずです。これがうまくいかなかった場合は、何か間違ったことをした可能性がありますが、コードを見なければ何とも言えません。

于 2010-10-02T10:42:36.430 に答える