簡體   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