2016-07-26 6 views
0

これは仮想的な疑問です。私はプログラムに関するいくつかの問題を抱えています、そして、私はそれがマルチスレッドのためかもしれないかと思います。マルチスレッドの問題

私はメインスレッドとワーカースレッドを持っています。ワーカースレッドは、シリアルポートを介してマシンと通信し、マシンからの出力を受け取ると、Pyqt信号を送信します。メインスレッドには信号を受信し、その出力を処理するスロットがあります。処理は、出力から別のオブジェクトを作成することを含む長い処理です。

最初の出力が処理される前にワーカースレッドがメインスレッドを2回呼び出す場合、どうなりますか?

+0

「エミッツシグナル」とは何ですか?あなたはPyQtシグナルを参照していますか? – jweyrich

+0

はい、申し訳ありませんが、私の質問に入れます –

答えて

1

メインスレッドが(イベントからの)長いタスクを実行している間に、新しいスレッドは処理されません。すべての新しいイベントはスレッド固有のキューに入れられ、イベントループが実行されると後で処理されます。対象となるスレッドがのスリープである場合、新しいイベントがキューに入れられ、スレッドはそれを処理するために起動されます。

The Event Systemのドキュメントを読むことができます。

+2

重要な点は、クロススレッド信号がイベントとしてラップされ、受信スロットが存在するスレッドのイベントキューにポストされていることです。スロットが呼び出されると、制御はイベントループに戻り、キューに入れられた信号イベントは処理されます(発生した順序で発生します)。 – ekhumoro

関連する問題