UIスレッドメインスレッド、またはそのようなネットワーク通信、ファイル転送、メインスレッドの動作と計算時間のかかる操作を、ユーザインターフェースは、タイムリーな応答を凍結しないかもしれません。
マルチスレッドアプリケーション:このような場合は、あなたが仕事の操作を実行する別のスレッドを作成することができ、比較的時間がかかり、そしてメインスレッド間のデータとの同期の相互作用を扱います。
一つの方法:
QT4.7以前のバージョン:スレッドがハングアップする場合はこのバージョンでは、スレッドを終了し、スレッドにも対応する機能を終了しました
1)作業者がカスタムクラスのスレッドはQThreadから継承されなければならない、スレッド処理機能とメインスレッドは、同じスレッドではありません
クラスMyThread:公共QThread
実行無効実行()//()仮想関数は、書き換える必要があります
{
睡眠は(5); //親クラスはQThreadですので、QThread ::睡眠を書いていない(5)
isDoneを発します
}
2)スレッドを起動し、あなたがすることはできません直接呼び出す)()(間接呼び出しの実行を開始し、実行を()
Mythread *スレッドスレッド> 開始()
コードの一部:
スレッド=新しいmythread(この); //スペースを割り当てます
(スレッド、&mythread :: isDone、この、&pthWidget :: DealDone)接続します。
(この、&mythread ::破壊され、この、&mythread :: stopthread)接続; //スレッド関数を閉じる閉じるには、ウィンドウの右上隅によってトリガーされたとき
pthWidget :: stopthreadを無効()
{
メモリの問題につながる//暴力が簡単にシャットダウン終了し、スレッド>()終了
スレッド>待ち時間は();スレッドを待って手での作業を終えた//
}
pthWidgetを無効:: DealDone()
{
timer->停止(); //データは、オフタイマー処理された後
qDebug()<< "オーバー"。
}
空pthWidget :: on_pushButton_clicked()
{
もし(timer->のisActive()== false)を//タイマーが機能しなかった場合
timer->スタート(100); // 100ミリ秒
// QThread ::スリープ(50); //非常に複雑なデータ処理、時間のかかります
//スレッドの処理データを開始
スレッド>スタート();
}
///ワーカースレッドクラス
#include "mythread.h"
mythread :: mythread(QObjectを*親):QThread(親)
{
}
空mythread ::実行します()
{
スリープ(50); //データ処理が非常に複雑で、時間がかかります
)(isDoneを発します。
}