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
使用说明:
- 类定义:
CTaskBase
是一个基类,用于表示一个可运行的任务。 - 启动和停止: 提供
Start()
和Stop()
方法来控制线程的生命周期。 - 运行逻辑: 子类需要实现
DoWork()
方法来定义自己的工作逻辑。 - 原子变量: 使用了
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助手提供,问题来源于学员提问