如何std :: thread睡眠

Jos*_*osé 16 c++ multithreading c++11

我是std :: thread的新手.我需要把一个线程从另一个线程中休眠,这可能吗?在示例中,我看到的只是代码:

std::this_thread::sleep_for(std::chrono::seconds(1));
Run Code Online (Sandbox Code Playgroud)

但我想做的是:

std::thread t([]{...});
t.sleep(std::chrono::seconds(1));
Run Code Online (Sandbox Code Playgroud)

要么 sleep(t, std::chrono::seconds(1));

有任何想法吗?

ten*_*our 23

因为sleep_for是同步的,所以它只在当前线程中才有意义.你想要的是一种暂停/恢复其他线程的方法.该标准没有提供这样做的方法(afaik),但您可以使用平台相关的方法native_handle.

例如在Windows上,SuspendThreadResumeThread.

但更重要的是,几乎从来没有必要这样做.通常当你遇到标准所没有提供的基本内容时,它就是一个红旗,你正走向一条危险的设计道路.考虑以不同的方式实现更大的目标.

  • “危险信号”是有效的,也是非常好的建议!但也不是绝对的,所以仔细考虑一下——由于程序员不断发现弱点、缺点、疏忽、有用的扩展和失败,语言正在不断变化。 (3认同)

Zet*_*eta 10

不.该标准没有给你这样的设施,也不应该.睡觉做什么?它暂停给定线程的执行至少给定的时间量.其他线程是否可以在不同步的情况下知道给定线程是否可以进入休眠状态以获得更好的性能?

不可以.您必须提供同步接口,这将抵消线程的性能提升.具有所需信息的唯一线程是否可以睡眠是线程本身.因此std::thread没有会员sleep,而std::this_thread有一个会员.