我有一个设计问题一直困扰着我很长一段时间。本质上,我有一个需要很长时间才能执行的功能和一个需要响应和最新的 gui。当用户点击开始按钮时,long 函数开始在 while 循环中执行,并且在每次执行后需要更新 gui。
我在想最好的方法是让 QThread 在 while 循环中运行,如果用户按下开始按钮,long 函数将开始执行。类似于以下内容:
class Application : public QThread
{
void run (void)
{
while (!mExiting)
{
if (StartPressed)
LongFunction();
// Need to update gui before
// running long function again
}
}
}
我尝试使用 BlockingQueuedConnection 执行 QMetaObject::Invoke 但是,当 gui 应用程序退出时,线程被卡住并且永远不会退出。我也尝试使用 QMutex,但是,gui 将被锁定,等待被锁定并由 long 函数使用的互斥锁。
我在想,当应用程序想要退出时,是否有任何方法可以取消 BlockingQueuedConnection,或者是否有其他方法可以实现这一点。