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

溫馨提示×

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
宁都县| 渑池县| 城口县| 黄梅县| 库尔勒市| 大城县| 宝兴县| 鄯善县| 顺义区| 汾西县| 营口市| 桑日县| 云梦县| 手游| 青田县| 永兴县| 任丘市| 田东县| 中阳县| 普陀区| 余江县| 日照市| 长垣县| 谷城县| 蓬莱市| 长兴县| 洪洞县| 鄯善县| 会泽县| 宣汉县| 高安市| 华安县| 乐亭县| 独山县| 淮北市| 东丽区| 福泉市| 黑山县| 定边县| 三明市| 名山县|