c ++ 11:如何在n秒后执行主线程中的函数

时间:2017-06-18 14:52:52

标签: c++ multithreading c++11 timer

我需要在一段时间后停止游戏。停止方法必须在主线程中运行,比如说,一分钟。 在此期间玩家玩,所以我不能停止执行。 我试图理解线程和异步,但我开始认为它们在我的情况下都没有用(如果我加入,用户就无法玩;如果我分离,&# 39; stop'方法将在一个单独的线程中调用)。 我怎么处理它? 非常感谢

3 个答案:

答案 0 :(得分:1)

用std :: async启动你的stop函数,然后你的stop函数里面有一个std :: this_thread.sleep_for(60s)作为第一个调用

e.g。

#include <future>
...
std::future<int> retCode = std::async(stop);
.. your game starts

int stop()

int stop()
{
  std::this_thread::sleep_for(std::chrono::minute(1));
  ...do whatever to stop game...
}

答案 1 :(得分:0)

在“主线程”中你应该有一个事件循环,是吗?在循环开始之前,获取当前时间,然后在循环中再次获取当前时间并检查第一次和循环中当前时间之间的差异。

答案 2 :(得分:0)

如果你真的需要/想要使用Threads,你应该看一下QtConcurrent框架。 QRunnable QThreadPool非常易于使用。

http://doc.qt.io/qt-5/qtconcurrent-index.html