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

溫馨提示×

C++線程類中如何管理線程資源

c++
小樊
85
2024-08-29 22:45:03
欄目: 編程語言

在C++中,可以使用std::thread庫來創建和管理線程。為了更好地管理線程資源,你可以將線程封裝在一個類中,并在類的構造函數、析構函數和成員函數中實現線程的創建、銷毀和管理。以下是一個簡單的示例:

#include<iostream>
#include<thread>
#include <mutex>
#include<condition_variable>
#include<chrono>

class ThreadManager {
public:
    ThreadManager() {
        // 創建線程
        thread_ = std::thread(&ThreadManager::threadFunction, this);
    }

    ~ThreadManager() {
        // 通知線程退出
        {
            std::unique_lock<std::mutex> lock(mutex_);
            stop_ = true;
        }
        condition_.notify_one();

        // 等待線程結束
        if (thread_.joinable()) {
            thread_.join();
        }
    }

private:
    void threadFunction() {
        while (true) {
            std::unique_lock<std::mutex> lock(mutex_);
            condition_.wait(lock, [this] { return stop_; });

            if (stop_) {
                break;
            }

            // 在這里執行你的任務
            std::cout << "Thread is running..."<< std::endl;
        }
    }

    std::thread thread_;
    std::mutex mutex_;
    std::condition_variable condition_;
    bool stop_ = false;
};

int main() {
    {
        ThreadManager manager;

        // 主線程執行其他任務,或者僅等待線程完成
        std::this_thread::sleep_for(std::chrono::seconds(5));
    }

    // 當ThreadManager對象被銷毀時,線程資源會被自動管理
    std::cout << "ThreadManager has been destroyed."<< std::endl;

    return 0;
}

在這個示例中,我們創建了一個名為ThreadManager的類,它包含一個線程、一個互斥鎖、一個條件變量和一個布爾變量stop_。在ThreadManager的構造函數中,我們創建了一個新線程并執行threadFunction。在析構函數中,我們通知線程退出,然后等待線程結束。

threadFunction是線程的工作函數,它使用條件變量等待通知。當stop_變量為true時,線程將退出循環并結束執行。這樣,我們可以在類的析構函數中設置stop_變量為true,從而控制線程的退出。

這種方法可以幫助你更好地管理線程資源,確保在對象被銷毀時線程能夠正確地退出并釋放資源。

0
卫辉市| 松阳县| 万年县| 眉山市| 镇巴县| 雷山县| 安远县| 杭锦旗| 奉节县| 浦东新区| 白水县| 屏南县| 新竹市| 长丰县| 兴文县| 甘南县| 明光市| 平远县| 浦县| 安化县| 临高县| 九台市| 凤阳县| 南和县| 宕昌县| 库尔勒市| 和平区| 新巴尔虎右旗| 清涧县| 攀枝花市| 峨眉山市| 柳江县| 瑞昌市| 贵南县| 工布江达县| 昂仁县| 焦作市| 固阳县| 元谋县| 闵行区| 宝兴县|