繁体   English   中英

如何std :: thread睡眠

[英]How to std::thread sleep

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

有任何想法吗?

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

例如,在Windows, SuspendThreadResumeThread

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM