問題タブ [qeventloop]

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.

0 投票する
2 に答える
339 参照

qt - 他のスレッドが大きなループでビジー状態になっているため、QTimer が遅延して起動する

環境の概要: qt で記述されたアプリケーションを実行するデバイスがあります。これには、データベース操作 (SQlite) を処理するメイン スレッドと、ネットワーク操作 (3G 経由) 用の別のスレッドがあります。メイン スレッド イベント ループは QCoreApplication::exec によって実行され、ネットワーク操作を処理する他のスレッドは QThread::exec によって実行されます。ところで、ソケット スレッド アフィニティは開始後に変更されます (例: moveToThread(socketThreadPtr))

問題の概要: データベースから約 10,000 レコードを選択するために、メイン スレッドがループでビジー状態になり、そのループに約 +30 秒かかります。ネットワーク スレッドには、期限が切れるたびにキープ アライブ メッセージを送信する必要がある 15 秒のタイマーがあります。問題は、timeout() シグナルのスロットがループの終了後にのみ実行されることです。

今までの解決策 (ただし、満足のいくものではありません): レコードを選択するループで QCoreApplication::processEvents を呼び出すと、問題は解決しますが、この回避策の代わりに解決策が存在するかどうか疑問に思います。

注意: キープアライブ メッセージを送信するコマンドを与えるタイマー、シグナル、およびスロットは、現在メイン スレッドで処理されます (ただし、読み取り/書き込みはネットワーク スレッドで行われます)。また、タイマーをネットワーク スレッドに移動しましたが、メイン スレッドにある場合と同じ結果が得られました。

0 投票する
0 に答える
78 参照

c++ - スロット引数が (時々) 無効です

10〜20回のシグナル呼び出しの1つで、スロットに無効な引数があります。問題は次のように要約されます

QCoreApplication::notifyInternal2これが発生した場合、 (たとえば)次のようなクラッシュ ダンプが表示され ます。

しかしevent->args、無効のようです。

プラットフォームは Win64、qt のバージョンは 5.6.1、コンパイラは vs2015 です。リリース。何かご意見は?ありがとう。