是的,我可以在Windows中使用Sleep(),或者在POSIX中使用pause(),然后继续。但是我怎么能只使用C++11就能入睡呢?我认为有一种方法,那就是使用std::this_thread连接调用线程,但std::this_thread没有像pthread函数那样的join()方法。更不用说我们不能用C++11处理信号,我知道如何永远迭代睡眠,如下所示:
while(true)
std::this_thread::sleep_for(std::chrono::seconds(1));但是,正如您所看到的,它一点也不优雅。此代码仍会消耗CPU时间。调度器必须处理这个进程。我也可以使用条件变量或promise,但是它会占用一些内存,或者在某些操作系统上不能工作(它会抛出一个异常来避免死锁)。
也许这可以等同于Windows的睡眠(无限):
while(true)
std::this_thread::sleep_for(std::chrono::hours::max());但许多人说这是不实际的。
有没有人能想出绝妙的办法?
发布于 2016-04-19 15:41:37
我能想到两种方法。
一个,@Guiroux提到的是sleep_until一个不可达的时间:
std::this_thread::sleep_until(std::chrono::system_clock::now() + std::chrono::hours(std::numeric_limits<int>::max()));或者让它无限期地等待一个永远不会满足的条件。
std::condition_variable cv;
std::mutex m;
std::unique_lock<std::mutex> lock(m);
cv.wait(lock, []{return false;});然而,我看不出这是什么原因。
发布于 2017-03-07 17:23:58
另一种可能性是:
std::promise<void>().get_future().wait();或者,如果您愿意:
std::promise<void> p;
p.get_future().wait();发布于 2016-10-04 15:45:36
与其尝试计算时间,为什么不睡觉,直到系统的最大可表示时间?
std::this_thread::sleep_until(std::chrono::time_point<std::chrono::system_clock>::max());https://stackoverflow.com/questions/36711131
复制相似问题