亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

如何利用C++的setevent函數實現復雜的線程控制

c++
小樊
85
2024-08-27 13:24:19
欄目: 編程語言

SetEvent 是 Windows API 中的一個函數,用于設置一個事件對象的狀態為已觸發

下面是一個使用 C++ 和 SetEvent 函數實現復雜線程控制的示例:

#include<iostream>
#include<vector>
#include<thread>
#include <mutex>
#include<condition_variable>
#include<windows.h>

// 定義一個全局事件對象
HANDLE g_event = CreateEvent(NULL, FALSE, FALSE, NULL);

void worker_thread(int thread_id) {
    std::cout << "Thread "<< thread_id << " is waiting for event..."<< std::endl;

    // 等待事件被觸發
    WaitForSingleObject(g_event, INFINITE);

    std::cout << "Thread "<< thread_id << " received the event!"<< std::endl;
}

int main() {
    const int num_threads = 5;
    std::vector<std::thread> threads;

    // 創建多個工作線程
    for (int i = 0; i < num_threads; ++i) {
        threads.emplace_back(worker_thread, i);
    }

    // 讓主線程休眠一段時間,以便其他線程有足夠的時間進入等待狀態
    Sleep(2000);

    std::cout << "Main thread is setting the event..."<< std::endl;

    // 設置事件對象的狀態為已觸發
    SetEvent(g_event);

    // 等待所有工作線程完成
    for (auto& t : threads) {
        t.join();
    }

    CloseHandle(g_event);

    return 0;
}

在這個示例中,我們創建了一個全局事件對象 g_event。然后,我們創建了多個工作線程,每個線程都會調用 worker_thread 函數。在 worker_thread 函數中,線程會調用 WaitForSingleObject 函數等待事件被觸發。當主線程調用 SetEvent 函數設置事件對象的狀態為已觸發時,所有等待該事件的線程將被喚醒并繼續執行。

請注意,這個示例僅適用于 Windows 平臺。如果你需要在其他平臺上實現類似的功能,可以考慮使用 C++11 標準庫中的 std::condition_variable 類。

0
江北区| 罗江县| 曲水县| 博白县| 玉门市| 塘沽区| 札达县| 桑日县| 双牌县| 卢湾区| 苗栗县| 平江县| 嘉定区| 马山县| 西丰县| 绿春县| 罗源县| 阿坝县| 商都县| 上林县| 曲松县| 秀山| 昔阳县| 桃源县| 贞丰县| 台北县| 民和| 遵义市| 永丰县| 利辛县| 南昌市| 周宁县| 三都| 金堂县| 沂南县| 乐安县| 珲春市| 库车县| 宽甸| 卫辉市| 普兰县|