0

サーバーとやり取りするアプリケーションに取り組んでいます。

起動中に、データベースからいくつかのデータをロードしています。データベースのサイズが大きい場合、アプリケーションは非常に長いループで実行されています。たとえば、db に 10 個の lac レコードがあり、ループが 10 lac 回繰り返されます。

一定の時間間隔 (ユーザーが設定) が 1 秒経過すると、アプリケーションはハートビート メッセージを別のスレッドでサーバーに送信します。

通常の場合、正常に動作していますが、アプリケーションが長いループで実行されると、ハートビート メッセージがサーバーによって受信されませんでしたが、返された書き込みバイトはQTcpSocket::write()私が書いているものと同じ (成功) ですが、tcpDump受信したバイトは表示されません。

利用した

tcpSocket->setSocketOption(QAbstractSocket::LowDelayOption , 1); 
tcpSocket->setSocketOption(QAbstractSocket::KeepAliveOption , 600);
4

1 に答える 1

0

processEvents()アプリケーションの応答性を維持するために、ループ内 (1000 サイクルごとまたは 100 ミリ秒ごとなど) を追加してみてください。もちろん、このような問題が発生した場合は、設計が悪いことを示しています。複数のスレッドを使用するようにアプリケーションを再設計することを検討してください。つまり、長い操作 (ループ) 用のメイン スレッドとワーカー スレッドです。Qt でのスレッド サポートの詳細については、こちらを参照してください。

于 2013-02-27T14:30:22.743 に答える