問題タブ [qthread]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - QThread ブロックを作成し、メイン スレッドから呼び出された関数が値を返すのを待つにはどうすればよいですか?
QThread の再実装でいくつかの作業を行っています。ときどき、ユーザーに Yes/No の質問をしたいので、QMessageBox::question() を使用することを計画していました。問題は、スレッドから呼び出すことができないことです。それは大きな問題ではありません。メッセージ ボックスを表示するメイン GUI スレッドのスロットに接続する信号を送信できますが、カスタム スレッドをブロックして、メッセージ ボックスが閉じられるのを待ち、戻り値を取得する必要もあります。値も同様です (ここでは、QMessageBox::StandardButton)。どうすればそれを行うことができますか?
編集: 次の(疑似)コードでうまくいきますか?
qt - このクラスのデストラクタが呼び出されないのはなぜですか?
2 つのクラスがあります。1 つはメイン スレッドで実行されて GUI 操作を実行し、もう 1 つは計算を実行してネットワーク リクエストを作成します。
以下は、メイン スレッドで実行されるクラスの初期化メソッドの抜粋です。
メインスレッドで実行されるクラスのデストラクタで:
私が期待しているのは、スレッドが終了し、CServerThread
クラスのインスタンスを破棄することです。ただし、CServerThread
クラスのデストラクタは呼び出されていません。
c++ - ワーカーからGUIに移動するシグナル/スロットを使用したQtQThreadの問題
QtCreatorとそれに付随するGUIツールを使用して開発されたQtアプリケーションがあります。メインスレッドTheGui
と、メインスレッドによって作成されるワーカースレッドWorkerThread
(と呼ばれるthread
)があります。
私が抱えている問題は、GUIでスロットを作成するときに使用することです
GUIのヘッダーファイル内およびvoid sendList(string str);
ワーカースレッドのヘッダーファイル内のシグナル内では、スロットが呼び出されることはありません。私は2つを使用して接続しました
GUIcppファイルのコンストラクター内。ワーカースレッドのスロットとGUIからのシグナルを除いて、同様のことを行いましたが、正常に機能しました。デバッガーを使用して、シグナルsendListが実際に呼び出されていることを知っていますが、それは決して呼び出されません。
何かご意見は?
pyqt - QProgressBar をループするとエラー >> QObject::installEventFilter: Cannot filter events for objects in different thread
この質問は、さまざまな形式で何度も尋ねられたようですが、私のコードに関連する解決策を見つけることができませんでした。
プログラムを実行すると表示されます
QObject::installEventFilter: 別のスレッドにあるオブジェクトのイベントをフィルタリングできません。
これにもかかわらず、コードは最初は機能しますが、しばらくすると爆発し、python は動作を停止したというエラーを出します。
私のコードは次のとおりです。
qthread - QThreads を使用して複数の QTcpSockets に書き込む方法は?
QTcpSockets と QThreads でこの問題に数日間苦労しています。
ポートをリッスンし、nextPendingConnection() を使用して新しいクライアントを作成する QTcpServer があります。これで、クライアントには読み取りと書き込みに使用できる qtcpsocket ができました。
サーバーに 100 のクライアントが接続されているとします。それらの 1 つが全員にメッセージをブロードキャストしたい場合、私のメイン スレッド ( nextPendingConnection() でクライアントを作成する場所) は、100 を超えるクライアントを反復処理し、ソケットで書き込みメソッドを呼び出す必要があります。たとえば、10 人のユーザーが同時にブロードキャストする場合、1000 回の反復を行う必要があるため、クライアント側 (ユーザーがメッセージを受信するとき) に遅延が生じると考えられます。
データを並列で送信できるように、すべてのソケット書き込みを別々のスレッドで行いたいと思います。ソケットが作成されたスレッドから別のスレッドからソケットを呼び出すことはできないことを知っています。多くのスレッドを持つことが良い考えかどうかわからないため、クライアントごとに 1 つのスレッドを使用したくありません。 (さらに、クライアントが切断しない限り、これらのスレッドは常に実行されている必要があります)。
スレッド フォーチュン サーバーの例を読みましたが、データの送信後にソケットが破棄されるため、問題の解決にはなりません。受信メッセージをリッスンする必要があるため(ブロードキャストできるようにするため)、ソケットを破壊したくありません。
私が考えたことの 1 つは、各クライアント (サーバー側とクライアント側) に 2 つのソケットを用意することです。1 つのソケットを読み取り用に保持し、もう 1 つのソケットをスレッド フォーチュン サーバーの例と同じように使用できるようにします。この場合、スレッドプールを使用してタスクの数を制限します (それ以外の場合は、クライアントごとに 1 つのスレッドを使用するのと同じことになります)。
正しい方向を教えてください。または、実際にクライアントごとに 1 つのスレッドを持たずに並列ソケット書き込みを実装する方法についてのヒントを教えてください...?
よろしくお願いします、
セバスチャン
multithreading - QT のスレッド化された opengl アプリケーションで GUI が更新されない
QThread を使用すると、(私が思うに) 奇妙な動作をしています。3.x カーネルを使用して GNU/Linux でテストしています
QGLWidget で描画する必要がある opengl 操作を実現するためにレンダリング スレッドを使用する場合、それを Phenom II X4 で実行すると正常に動作します。しかし、Intel(R) Atom(TM) CPU N550 1.50GHz で実行すると、イベントがトリガーされたときにのみ GUI が更新されます (マウスを動かしたり、キーボードを押したりした場合)。スレッドは、メインスレッドに自分自身を更新するように通知しますが、機能しません。レンダリング スレッド内で QGLWidget の update メソッドを呼び出しましたが、どちらも機能しません。
この例で再現できます http://mih.voxindeserto.de/threadedcube.html この呼び出しを追加すると
ExampleRenderThread のレンダリング スレッドの run メソッド内。
マシンには同じ OS、3.0.7 カーネルを搭載した Archlinux x86_64 が搭載されています。
ハードウェア関連なのか、QThread 設定またはイベント フィルタリングなのかはわかりません。何が起こっているのでしょうか?
multithreading - QT: 他のスレッドから独立したスレッドを実行する
例を挙げましょう。
A::b1 と A::b2 を、親スレッド (A) のリソースを共有するのではなく、完全に独立したスレッドとして実行したい。メインスレッドを b1 と b2 の親スレッドとして指定する方法はありますか?
QThreadPool と QRunnable も調べましたが、スレッドプールのすべてのランナブルを管理する (たとえば、そのうちの 1 つを停止してから再度実行する) 方法がわかりません。
multithreading - ワーカー スレッドごとに進行状況を変更する方法
私はPyQt4が初めてなので、おそらくバガテルです。ワーカー スレッドによって更新される GUI で進行状況を表示しようとしています。QProgressBar は、QTableWidget 内の他のメモリと一緒です。
ワーカー スレッドは、GUI の init 関数で開始されます。
ここにスレッドクラスがあります
私のサーバーがデータベースの値を変更した場合、彼は次のメソッドを呼び出します。このメソッドは、スレッド内のリモート prozedure 呼び出しでキャプチャされます。
パターンは、私の GUI を更新した単純なオブザーバーです。GUI でテーブルを更新するには、次のメソッドを呼び出します。
このメソッドは、次のメソッドがこれを行う更新が必要な場合、行に変更があったかどうかを確認します。
他のメモリは更新できますが、進行状況は更新できません。ここでは、進行状況を更新したい行です
この行の後、GUI がクラッシュし、次のメッセージが表示されます
QPixmap: GUI スレッドの外でピックスマップを使用するのは安全ではありません
私の推測では、「メイン/Gui」スレッドの外で QPixmaps を変更することはできません。この問題を解決する方法がわからないので、解決のためのすべての提案を歓迎します。
前もって感謝します。
python - メイン UI をフリーズせずに QStandartItemModel を更新する方法
私は PyQt4 を学び始めており、長い間何かに固執していて、自分で理解できません:
概念は次のとおりです。数秒ごとに再構築されるカスタム QStandartItemModel を備えた TreeView があり、多数の (少なくとも数百の) エントリを持つことができ、さまざまな列などに追加のデリゲートも存在します。かなり複雑で、デリゲートのない単純なモデルの構築時間は最大 .3 秒になり、TreeView がフリーズします。
これを解決する最善の方法についてアドバイスをください。どういうわけか別のスレッドでモデルを構築し、最終的にそれを TreeView に送信して、新しいモデルで setModel() を実行することを考えていましたが、それを機能させることができませんでした。
問題を少し説明するコードを次に示します。
ヒントをありがとう。これまでに得た状況は次のとおりです。更新するたびに、新しいモデルを作成して TreeView に送信します...高速ですが、TreeView の現在のモデルで何が起こっているのか、どのように対処すればよいのかわかりません。また、「アプリ」で使用されるメモリが常に増加しているようです。
もう1つのことは、選択を保持したいのですが、視覚的な四角形や行の順序ではなく、アイテムデータに基づいているため、それも行いましたが、適切な方法であるにはあまりにも汚い/ハッキーに見えます. これに関するヘルプもいただければ幸いです。コードは次のとおりです。
python - pyqtでは、例外を発生させるためにセカンダリスレッド(QThread)に信号を送る方法はありますか?
セカンダリスレッドの実行関数は次のようになります。
例外があればシステムをクリーンアップして安全な状態にすることができるため、これは通常はすばらしいことです。セカンダリスレッドで例外を発生させるアボートボタンをプライマリスレッドに追加したいと思います。例外を発生させるメソッドをQThreadオブジェクトに作成しようとしましたが、シグナルが発生したときに例外を発生させるのはプライマリスレッドです。
QThreadがそれ自身のスレッドで非同期的に例外を発生させるように信号を送ることができるかどうか誰かが知っていますか?