ZBLOG

CTaskBase.h

CTaskBase.h 通常是自定义的 C++ 头文件名,可能在多线程编程或任务管理中使用。由于没有具体的内容或上下文,下面我会提供一个简单的 CTaskBase 类的示例,它可以用于基础的任务管理。

示例:CTaskBase.h

#ifndef CTASKBASE_H
#define CTASKBASE_H

#include <thread>
#include <atomic>
#include <functional>
#include <iostream>

class CTaskBase {
public:
    CTaskBase() : isRunning(false), stopRequested(false) {}

    virtual ~CTaskBase() {
        Stop();
    }

    void Start() {
        isRunning = true;
        workerThread = std::thread(&CTaskBase::Run, this);
    }

    void Stop() {
        stopRequested = true;
        if (workerThread.joinable()) {
            workerThread.join();
        }
        isRunning = false;
    }

    bool IsRunning() const {
        return isRunning;
    }

protected:
    // 需要重载该方法以实现具体任务
    virtual void Run() {
        while (!stopRequested) {
            // 执行任务逻辑
            DoWork();
            std::this_thread::sleep_for(std::chrono::milliseconds(100));
        }
    }

private:
    // 子类可以实现这个方法来执行实际工作
    virtual void DoWork() = 0;

private:
    std::thread workerThread;
    std::atomic<bool> isRunning;
    std::atomic<bool> stopRequested;
};

#endif // CTASKBASE_H

使用说明:

  1. 类定义: CTaskBase 是一个基类,用于表示一个可运行的任务。
  2. 启动和停止: 提供 Start()Stop() 方法来控制线程的生命周期。
  3. 运行逻辑: 子类需要实现 DoWork() 方法来定义自己的工作逻辑。
  4. 原子变量: 使用了 std::atomic 来保证对状态变量的安全访问,避免数据竞争。

示例子类:

你可以创建一个从 CTaskBase 派生的子类,例如:

class MyTask : public CTaskBase {
protected:
   void DoWork() override {
       static int count = 0;
       std::cout << "Working... " << count++ << "\n";
   }
};

使用示例:

int main() {
   MyTask task;

   task.Start();

   std::this_thread::sleep_for(std::chrono::seconds(2)); // 让它工作一段时间

   task.Stop(); // 请求停止

   return 0;
}

这个示例代码展示了如何构建一个基本的任务框架,可以根据需求进行扩展。如果你有关于特定功能或细节方面的问题,请告诉我!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=20913

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?