1

NSImageView常に更新される画像を再描画する必要があります。を作成するモデル オブジェクトとNSImage、このイメージを にリンクするコントローラがありますNSImageView

マルチスレッドを使用すると、バックグラウンド スレッドでモデル オブジェクトの出力画像を継続的に更新することが簡単にできます。しかし、UI インタラクションはメイン スレッドで行われることになっているため、NSImageView のイメージをバックグラウンド スレッドに設定することはできません。NSImageViewメインスレッドでを更新すると、プログラムが応答しなくなります

4

2 に答える 2

1

矛盾するのは嫌いですが、メインスレッドの画像を更新するとプログラムが応答しなくなると思うのはなぜですか?

次の計算NSImageが瞬時に行われる場合は、論理的には最後の計算を計算して表示する必要があります。これは、間にあるものが認識されないためです。

次の計算に時間がかかる場合は、メインスレッドから計算を実行してから、画像をメインスレッドのビューにプッシュします(たとえば、を使用してperformSelectorOnMainThread:...)。メインスレッドは、他のイベントを処理するために次の画像を計算している間ずっとあるので、応答しなくなることはありません。

更新がディスプレイのフレームレートよりも頻繁である場合は、を設定しCVDisplayLink、画像を更新しているものをポーリングして、そのすべてのティックで最新のものを取得することで、おそらく1つ上手くいくことができます。

于 2012-08-21T19:46:45.253 に答える
0

NSimageViewバックグラウンド スレッドで更新しないでください。スレッドセーフではありません。あなたが使用する必要がありますperformSelectorOnMainThread:withObject:waitUntilDone:

于 2012-08-22T06:57:57.890 に答える