私は、「AppKitのコントロールは、メインスレッド以外のスレッドから更新するのは親切ではありません」と言われています。AppKitへの独立したプロセスを効率的に行うにはどうすればいいですか?
私は2つのプロセスがあります。
NSThread *thread_Client = [[NSThread alloc] initWithTarget:self selector:@selector(myTcpClient) object:nil];
NSThread *thread_Display = [[NSThread alloc] initWithTarget:self selector:@selector(displayData) object:nil];
が、しばらくした後にそれが出て空白またはロックアップ:
- update variables in the heap periodically
- display values from the heap to the display
を私がしたんです。
もっと良い方法はありますか?
thx
今あなたのアプリはUIを更新するためにバックグラウンドスレッドのwhileループで回転しています。あなたがコントロールに書き込むことができたとしても、あなたはたくさんのサイクルを無駄にしています。代わりに、0.5秒ごとなど、より合理的なリフレッシュレートで呼び出されるタイマーを追加してみてください。タイマーをメインスレッドにアタッチし、コールバックメソッドでUIを更新します。 –
NSTimerは別のスレッドだと思ったのですか?私はスリープ(100)を追加してそれが役立つかどうかを調べるつもりでした。 – jdl
NSTimerは「別のスレッド」ではありません。あなたがしていることを本当に理解することなくスリープ(100)を追加することは、いずれかの方法にはなりません。ジェイソンの提案は健全です。私はそれが実際にどのように動作するのかを理解するためにNSTimerを読んで、そこから行くことをお勧めします。 –