Qt:在没有挂起UI的情况下在函数中等待一段时间

时间:2015-01-28 12:47:53

标签: c++ qt

我提出了以下代码,在函数中等待一段时间而不会挂起UI。

QEventLoop loop;
QTimer timer;
connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
timer.start(1000);
loop.exec();

我想知道这是否会导致任何意外问题。此外,有没有更好的方法来实现这一目标?

2 个答案:

答案 0 :(得分:1)

如果此代码可能导致意外问题,请回答您的问题?可能是的,这次经常会崩溃吗?不,我不这么认为。

更好的方法?我相信是的,我看到的第一件事就是你在这个函数之外的某个地方等待1秒钟,但是如果1秒还不够并且那些变量尚未准备就会发生什么?

如果等待变量准备好并且有一个功能或信号在这些数据可用时提醒您,那不是更好吗?

此外,您永远不应该停止编写新函数和更易读的代码,因为您需要访问本地变量,有许多方法可以传递或访问本地变量,或者它们应该根本不是本地变量。

答案 1 :(得分:1)

如果你真的想这样做,你可以运行消息循环,直到最短的时间过期。

auto begin = std::chrono::system_clock::now();
while (std::chrono::system_clock::now() - begin > std::chrono::duration<double>(2))
{
    QCoreApplication::processEvents()
}

但是我会建议你重新思考你想要做的事情,在任意时间内睡觉几乎是不合理的。