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

溫馨提示×

如何在C++線程類中實現定時任務

c++
小樊
103
2024-08-29 22:51:42
欄目: 編程語言

在 C++ 中,可以使用 和<chrono> 庫來實現線程類中的定時任務

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

class TimerThread {
public:
    TimerThread(int interval) : interval_(interval), stop_signal_(false) {}

    void start() {
        thread_ = std::thread(&TimerThread::execute, this);
    }

    void stop() {
        std::unique_lock<std::mutex> lock(mutex_);
        stop_signal_ = true;
        cv_.notify_one();
        lock.unlock();
        if (thread_.joinable()) {
            thread_.join();
        }
    }

private:
    int interval_;
    bool stop_signal_;
    std::thread thread_;
    std::mutex mutex_;
    std::condition_variable cv_;

    void execute() {
        while (true) {
            std::unique_lock<std::mutex> lock(mutex_);
            cv_.wait_for(lock, std::chrono::seconds(interval_), [this] { return stop_signal_; });
            if (stop_signal_) {
                break;
            }
            lock.unlock();
            task(); // 執行定時任務
        }
    }

    void task() {
        // 在這里編寫需要定時執行的任務
        std::cout << "Task executed!"<< std::endl;
    }
};

int main() {
    TimerThread timer(5); // 設置定時任務間隔為 5 秒
    timer.start();

    std::this_thread::sleep_for(std::chrono::seconds(20)); // 讓主線程休眠 20 秒

    timer.stop();

    return 0;
}

在這個示例中,我們創建了一個名為 TimerThread 的類,它接受一個表示定時任務間隔的參數。start() 方法用于啟動線程,而 stop() 方法用于停止線程。execute() 方法是線程的主體,它使用條件變量等待指定的時間間隔,然后執行定時任務。

請注意,這個示例僅用于演示目的。在實際項目中,您可能需要根據需求對其進行修改和優化。

0
彩票| 宿迁市| 鸡西市| 平昌县| 五指山市| 浦江县| 淮北市| 成安县| 江北区| 河东区| 筠连县| 沁源县| 修武县| 苍溪县| 大宁县| 东兴市| 鹿泉市| 铁岭县| 德阳市| 马龙县| 大埔区| 垣曲县| 交口县| 西乌珠穆沁旗| 那曲县| 洛川县| 若尔盖县| 东光县| 巴彦县| 宝山区| 图木舒克市| 仙游县| 无锡市| 灯塔市| 临武县| 德兴市| 吴忠市| 诏安县| 象州县| 乡宁县| 闽侯县|