これは私が持っているものです:
void MyThread::run() {
int progress = 0;
while (1) {
// do something
progres++;
emit(progressChanged(progress));
}
}
// mainwindow
auto t = new MyTread();
connect(t, SIGNAL(progressChanged(int)), this, SLOT(onProgressChanged(int)));
t->start();
void MaiWindow::onProgressChanged(int) {
this->progressBar->setValue(progressBar->value() + 1);
}
それは機能し、スレッド内のジョブは完了し、プログレスバーは100%まで上がります。
しかし、UIは完全にフリーズ/ラグしています。プログレスバーのあるウィンドウをドラッグすると、5秒の遅延が発生します。低いスレッド優先度を使用してみましたが、結果はありません。
たぶん私はここにミューテックスが必要ですか?