我是std :: thread的新手。我需要把一个线程从另一个线程中休眠,这可能吗?在示例中,我看到的只是代码:
std::this_thread::sleep_for(std::chrono::seconds(1));
但我想做的是:
std::thread t([]{...});
t.sleep(std::chrono::seconds(1));
或
sleep(t, std::chrono::seconds(1));
有什么想法吗?
答案 0 :(得分:23)
因为sleep_for
是同步的,所以它只在当前线程中才有意义。你想要的是一种暂停/恢复其他线程的方法。该标准没有提供这样做的方法(afaik),但您可以使用native_handle
使用与平台相关的方法。
例如,在Windows上,SuspendThread
和ResumeThread
。
但更重要的是,几乎从来没有必要这样做。通常当你遇到标准所没有提供的基本内容时,它就是一个红旗,你正走向一条危险的设计道路。考虑以不同的方式实现更大的目标。
答案 1 :(得分:10)
没有。该标准没有给你这样的设施,它不应该。睡觉做什么?它暂停给定线程的执行至少给定的时间量。其他线程可能知道没有同步,给定的线程可以进入休眠状态以获得更好的性能吗?
没有。您必须提供同步接口,这将抵消线程的性能提升。具有所需信息的唯一线程是否可以睡眠是线程本身。因此,std::thread
没有成员sleep
,而std::this_thread
只有一个。