相关疑难解决方法(0)

如何只使用C++ 11永远睡觉

是的,我可以在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));
Run Code Online (Sandbox Code Playgroud)

但是,正如你所看到的,它根本不优雅.此代码仍然消耗CPU时间.调度程序必须关心此过程.我也可以使用条件变量或promise,但是它再次占用一些内存或者不能在某些操作系统上工作(它会抛出异常以避免死锁).

也许这可能相当于Windows的Sleep(INFINITE):

while(true)
   std::this_thread::sleep_for(std::chrono::hours::max());
Run Code Online (Sandbox Code Playgroud)

但许多人说这不实用.

谁能想到出色的方式?

c++11

9
推荐指数
2
解决办法
4699
查看次数

标签 统计

c++11 ×1