0

私はすでに http://wiki.wxpython.org/LongRunningTasks http://wiki.wxpython.org/CallAfter を読み、Google でたくさん検索しましたが、私の問題に対する答えは見つかりませんでした。私の意見では、それは多くのコードであり、より理論的な問題であるため、コードがなくても問題ないことを願っています.

例でやりたいこと: メイン スレッドにチェック ボックス付きのグリッド (wx.grid) があります。次に、新しいスレッド (thread.start_new_thread) を開始し、すべての行 (1 行あたり 1 秒) を調べて、チェックボックスが設定されているかどうかを確認します。設定されている場合、何らかのジョブが実行されます。

スレッドを開始するにすべての行を読み出せば、これはうまくいきます。しかし、ユーザーは別のチェックボックスのチェックを外したりチェックしたりできる必要があるため、スレッドの実行中にそれを読み取る必要があります。しかし、新しいスレッドでそれを読み取ると、「NonType オブジェクトは呼び出し可能ではありません」というエラーが発生することがあります。wx.CallAfter を使用して、他のスレッドでグリッドを操作する必要があるためだと思います。しかし、CallAfter を使用して戻り値を取得することはできません。

この問題を解決する方法がわかりません。おそらく、スレッドの経験が豊富な人には、いくつかのアイデアがありますか? 追加のデータが必要な場合はお問い合わせください。ただし、私の例には必要な情報がすべて含まれていると思います。

4

1 に答える 1

1

この種のものに対する一般的なアプローチは、Queue.Queue オブジェクトを使用してコマンドを 1 つ以上のワーカー スレッドに渡すことです。ワーカー スレッドは、プルする準備が整ったアイテムがキューに存在するまで、キューからのプルを待機します。コマンド オブジェクトの一部は、コマンドが完了したときに (wx.CallAfter のように、スレッドセーフな方法で) メッセージを送信する GUI スレッドのターゲットになる可能性があります。

wx.lib.delayedresult モジュールも見てください。上記に似ていますが、もう少し機能があり、堅牢です。

于 2013-02-01T23:38:28.350 に答える