在 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()
方法是線程的主體,它使用條件變量等待指定的時間間隔,然后執行定時任務。
請注意,這個示例僅用于演示目的。在實際項目中,您可能需要根據需求對其進行修改和優化。