std::this_thread::sleep_for 10毫秒 睡眠时间过长怎么办
时间: 2024-01-16 12:02:19 浏览: 93
C++11 并发指南之std::thread 详解
```cpp
#include <iostream>
#include <thread>
#include <chrono>
int main() {
std::chrono::milliseconds sleepTime(10);
std::this_thread::sleep_for(sleepTime); // 休眠10毫秒
// 如果睡眠时间过长,可以考虑使用条件变量来实现更灵活的等待机制
std::condition_variable cv;
std::mutex mtx;
bool isWakeUp = false;
std::thread sleepThread([&]() {
std::this_thread::sleep_for(std::chrono::milliseconds(1000)); // 休眠1000毫秒(1秒)
std::unique_lock<std::mutex> lock(mtx);
isWakeUp = true;
cv.notify_one();
});
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, [&]() { return isWakeUp; });
sleepThread.join();
return 0;
}
```
在上述代码中,我们使用了`std::this_thread::sleep_for`函数来休眠10毫秒。如果睡眠时间过长,我们可以使用条件变量来实现更灵活的等待机制。在这个例子中,我们创建了一个线程来休眠1秒钟,然后通过条件变量和互斥锁来等待线程唤醒。当线程休眠结束后,它会设置一个标志位,并通过条件变量通知主线程。主线程在等待期间会一直阻塞,直到收到线程唤醒的通知。
阅读全文