91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

如何利用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
汶川县| 莱阳市| 三明市| 台中县| 武山县| 杂多县| 简阳市| 舒兰市| 延川县| 清水河县| 晋中市| 昆山市| 金秀| 平泉县| 从化市| 华池县| 肥乡县| 弋阳县| 桂林市| 白银市| 涞源县| 乌恰县| 彰化市| 都兰县| 玉门市| 普安县| 阳山县| 广安市| 株洲市| 烟台市| 高淳县| 锡林郭勒盟| 鸡东县| 青海省| 隆回县| 泰和县| 五台县| 全州县| 论坛| 汤原县| 中方县|