gpt4 book ai didi

c++ - 在 QThread 中运行长时间操作并向主线程发送信号仍然会卡住 UI

转载 作者:行者123 更新时间:2023-11-28 00:56:21 35 4
gpt4 key购买 nike

这是我的:

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 秒的延迟。我尝试使用较低的线程优先级 - 没有结果。

也许我需要一个互斥锁?

最佳答案

不要发出太多的 progressChanged 信号。信号很快,但如果您每秒设置数百或数千次进度条值,UI 将卡住。将进度条变化保持在最低限度,每秒 5-10 次变化就足够了。

关于c++ - 在 QThread 中运行长时间操作并向主线程发送信号仍然会卡住 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11039160/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com