如何在C++线程类中实现定时任务

avatar
作者
筋斗云
阅读量:0

在 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() 方法是线程的主体,它使用条件变量等待指定的时间间隔,然后执行定时任务。

请注意,这个示例仅用于演示目的。在实际项目中,您可能需要根据需求对其进行修改和优化。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!