gpt4 book ai didi

c - Q线程 : how to stop an infinite loop

转载 作者:太空宇宙 更新时间:2023-11-04 04:55:18 25 4
gpt4 key购买 nike

我在 Qthread 中执行一个图像处理过程,大约需要 3 个小时,而且不可能在其中放置一些检查点作为导出门。问题是我无法阻止它。此代码表示此问题:

class Toto : public QObject
{
Q_OBJECT
public slots:
void exec(){
//I represent the real process with an infinite loop
while(1==1);
}
};
int main(int argc, char *argv[])
{
QApplication aa(argc, argv);
QThread * t1 = new QThread;
Toto * toto1 = new Toto;
QThread * t2 = new QThread;
Toto * toto2 = new Toto;
QPushButton push;
push.show();
toto1->moveToThread(t1);
toto2->moveToThread(t2);
QMetaObject::invokeMethod(toto1, "exec", Qt::QueuedConnection);
QMetaObject::invokeMethod(toto2, "exec", Qt::QueuedConnection);
QApplication::connect(&push, SIGNAL(pressed()), t1,SLOT(terminate()), Qt::QueuedConnection);
QApplication::connect(&push, SIGNAL(pressed ()), t2,SLOT(terminate()), Qt::QueuedConnection);
t2->start();
t1->start();
return aa.exec();
}

谢谢你的帮助

最佳答案

线程永远不会处理 terminate() 信号,因为 exec 槽永远不会将控制返回给线程的事件循环。

相反,您应该在 QApplication 的主循环中运行的对象中创建一个插槽。将按钮连接到该插槽,然后在适当的线程对象上调用 terminate()。

关于c - Q线程 : how to stop an infinite loop ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9429748/

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