Qtを使用してネットワークベースのAPIと対話するプログラムを作成しています。 APIとのやり取りはXMLメッセージ(クエリと結果の両方)で行われますQTcpSocketデータを待っているときにGUIをブロックします。
共有ライブラリプロジェクトのクラスで通信とデータ処理を実装しました。ユーザーが接続の詳細を入力できるQMainWindowがあります。接続ボタンをクリックすると、次のようになります。 1.接続クラスのインスタンスが作成されます。 2.接続メッセージがAPIに送信され、セッションIDが取得されます。答えは解析され、セッションIDがクラスインスタンスに格納されます。 3.いくつかのフィールド情報を取得するメッセージがAPIに送信されます。次にXMLは解析され、必要なフィールド情報が抽出され、APIからデータが取得されます。 4.別のメッセージが送信され、フィールドに一致するデータが取得されます。次に、XML回答を解析し、処理するためにデータ構造に格納する。 5.データが処理され、最終的にユーザーに表示されます。
ライブラリをテストするための簡単なコンソールプログラムを作成しました。正常に動作しています。前のメッセージのすべてのデータが処理される前にメッセージは送信されません。しかし、QMainWindowインスタンスで同じプロセスを実装すると、待機は発生せず、メッセージは待たずに次々に送信されます。
次のメッセージを送信する前に、完全な処理を待つようにGUIスレッドをブロックするにはどうすればよいですか?
ありがとうございました
GUIスレッドをブロックしないでください。次のメッセージを送信しているイベントを確認するためにコードを修正してください。それが適切であれば、すべてのtcpは別のスレッドにコードを送信/受信します。 – Matt
私は一般的にGUIスレッドをブロックするべきではないことを知っていますが、この場合、抽出するデータはレンダリング前に処理する必要があるためです。私はユーザーがプロセスを中断できないようにしたい。 – FredCpp
本当に必要な場合は?ポップアップダイアログを使用するか、関連するGUI項目を個別にブロックします。ちょうどすべてのアプリのように。 – Matt