中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

c++ wait_for有哪些功能

c++
小樊
81
2024-11-24 12:03:53
欄目: 編程語言

wait_for 是 C++ 標準庫 <chrono> 中的一個函數,它用于等待給定的時間間隔。這個函數的主要功能是阻塞當前線程直到指定的時間到達或者發生某個特定事件。wait_for 的常見用途包括:

  1. 延遲執行:通過傳遞一個時間間隔(如 std::chrono::secondsstd::chrono::milliseconds),你可以讓當前線程暫停一段時間。這對于實現定時任務或延時操作非常有用。
#include <iostream>
#include <chrono>
#include <thread>

int main() {
    std::cout << "Waiting for 5 seconds...\n";
    std::this_thread::sleep_for(std::chrono::seconds(5));
    std::cout << "5 seconds have passed.\n";
    return 0;
}
  1. 輪詢檢查wait_for 也可以與條件變量結合使用,以實現輪詢檢查某個條件是否滿足。當條件不滿足時,線程會等待一段時間,然后再次檢查。這比忙等待(busy-waiting)更節省資源。
#include <iostream>
#include <chrono>
#include <thread>
#include <mutex>
#include <condition_variable>

std::mutex mtx;
std::condition_variable cv;
bool ready = false;

void print_id(int id) {
    std::unique_lock<std::mutex> lck(mtx);
    while (!ready) {  // 如果 ready 為 false, 則等待
        cv.wait(lck);  // 當前線程被阻塞, 當全局變量 ready 變為 true 之后,
    }
    // ...
}

int main() {
    std::thread threads[10];
    // spawn 10 threads:
    for (int i = 0; i < 10; ++i)
        threads[i] = std::thread(print_id, i);

    std::cout << "10 threads ready to race...\n";
    {
        std::lock_guard<std::mutex> lck(mtx);
        ready = true;  // set the flag to true
    }
    cv.notify_all();  // wake up all threads

    for (auto &th : threads) th.join();

    return 0;
}

在這個例子中,print_id 函數會等待直到全局變量 ready 被設置為 true。主線程在設置 readytrue 之后,通過 cv.notify_all() 喚醒所有等待的線程。

需要注意的是,wait_for 函數會阻塞當前線程,直到指定的時間間隔到達或者發生某個特定事件。如果在這段時間內沒有其他線程調用 cv.notify_one() 來喚醒等待的線程,那么等待的線程將會一直阻塞下去。因此,在使用 wait_for 時,通常需要配合條件變量來實現更復雜的同步邏輯。

0
博罗县| 瓮安县| 灵山县| 泰州市| 沾化县| 延庆县| 宁远县| 苍南县| 阳朔县| 黑山县| 理塘县| 南投县| 高唐县| 万宁市| 康乐县| 泊头市| 遂溪县| 喜德县| 碌曲县| 舟曲县| 金川县| 澄城县| 华亭县| 青海省| 临沧市| 宁乡县| 永康市| 桃园市| 佛坪县| 大足县| 泰兴市| 鄂温| 江陵县| 吉安县| 阿拉善左旗| 尼勒克县| 景东| 商河县| 洛扎县| 桐城市| 吉安市|