ZBLOG

CTaskBase.h

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

示例:CTaskBase.h

  1. #ifndef CTASKBASE_H
  2. #define CTASKBASE_H
  3. #include <thread>
  4. #include <atomic>
  5. #include <functional>
  6. #include <iostream>
  7. class CTaskBase {
  8. public:
  9. CTaskBase() : isRunning(false), stopRequested(false) {}
  10. virtual ~CTaskBase() {
  11. Stop();
  12. }
  13. void Start() {
  14. isRunning = true;
  15. workerThread = std::thread(&CTaskBase::Run, this);
  16. }
  17. void Stop() {
  18. stopRequested = true;
  19. if (workerThread.joinable()) {
  20. workerThread.join();
  21. }
  22. isRunning = false;
  23. }
  24. bool IsRunning() const {
  25. return isRunning;
  26. }
  27. protected:
  28. // 需要重载该方法以实现具体任务
  29. virtual void Run() {
  30. while (!stopRequested) {
  31. // 执行任务逻辑
  32. DoWork();
  33. std::this_thread::sleep_for(std::chrono::milliseconds(100));
  34. }
  35. }
  36. private:
  37. // 子类可以实现这个方法来执行实际工作
  38. virtual void DoWork() = 0;
  39. private:
  40. std::thread workerThread;
  41. std::atomic<bool> isRunning;
  42. std::atomic<bool> stopRequested;
  43. };
  44. #endif // CTASKBASE_H

使用说明:

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

示例子类:

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

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

使用示例:

  1. int main() {
  2. MyTask task;
  3. task.Start();
  4. std::this_thread::sleep_for(std::chrono::seconds(2)); // 让它工作一段时间
  5. task.Stop(); // 请求停止
  6. return 0;
  7. }

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


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?