C++ C++;在循环中等待x秒

C++ C++;在循环中等待x秒,c++,C++,我想知道如何在循环中等待。 我想做的是单击程序上的一个按钮,如果发生错误,它将显示错误消息3秒钟,然后消失。所有这些都在一个始终运行的循环中。 我试过ctime、sleep等,但他们都将程序冻结到时间结束。这不是我想要的 我曾考虑过要得到PC时钟和+3秒,然后做一个if()来检查时钟==时钟+3。但是我没有找到一种方法来计算时钟时间,并按照我的想法去做。我知道他们是一个很好的方式来做我想做的事情,但是我还没有弄明白怎么做。我只是把线程冻结到时钟结束 因此,如果有人能把我引向正确的方向,或者/或者

我想知道如何在循环中等待。 我想做的是单击程序上的一个按钮,如果发生错误,它将显示错误消息3秒钟,然后消失。所有这些都在一个始终运行的循环中。 我试过ctime、sleep等,但他们都将程序冻结到时间结束。这不是我想要的

我曾考虑过要得到PC时钟和+3秒,然后做一个if()来检查时钟==时钟+3。但是我没有找到一种方法来计算时钟时间,并按照我的想法去做。我知道他们是一个很好的方式来做我想做的事情,但是我还没有弄明白怎么做。我只是把线程冻结到时钟结束


因此,如果有人能把我引向正确的方向,或者/或者给我看一些关于如何做到这一点的例子,那就太好了。

暂停主线程一段时间将冻结整个程序,而不管您使用的暂停方式如何。 我不太熟悉上面评论中提到的事件循环。然而,我将使用std::thread(c++11)来完成这项任务,如果您不熟悉c++11,还有许多其他非标准的创建线程的方法,即在linux和windows中,您可以在链接中使用。 让我们谈谈C++: 例如,您可以编写一个函数来显示错误消息,等待几秒钟后返回; 该函数将具有以下签名

void myFunction(char errMsg[], unsigned int durationSeconds);
然后,您可以使用以下命令从主线程(在其中显示消息的函数)调用它:

现在回到您的问题,C++11还提供了一种方便的方法,可以在不使用while循环的情况下暂停线程一段时间,您可以使用以下代码:

std::chrono::seconds interval(durationSeconds);
std::this_thread::sleep_for(interval);

只需在显示消息后编写它们,这应该会有所帮助。

向我们展示迄今为止的代码。如果要避免阻塞线程,您需要一个事件循环。有多个代码要显示。我刚试过一些基本的计时器@styblshow对话框记住当前时间,在每次迭代中检查经过的时间如果超过3秒关闭对话框如何创建事件循环:)@tadman听起来这是我的解决方案:DUnrelated:。基本上,它是一个阻止等待消息的循环。在UI上单击鼠标将显示一条消息。计时器到期是一条消息。作业完成将是一个信息。网络数据包到达,可能是一条消息。当消息到达时,循环将被唤醒,执行处理消息所需的任何操作,然后返回睡眠状态。在希望出现不确定行为且不希望处理线程同步的程序中,这些功能非常有用。您经常在嵌入式系统和GUI中看到它们。
std::chrono::seconds interval(durationSeconds);
std::this_thread::sleep_for(interval);