如何std :: thread睡眠

时间:2012-10-12 12:55:20

标签: c++ multithreading c++11

我是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));

有什么想法吗?

2 个答案:

答案 0 :(得分:23)

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

例如,在Windows上,SuspendThreadResumeThread

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

答案 1 :(得分:10)

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

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