功能描述
实现一个任务队列,用于任务的执行
任务队列
- 任务队列可以添加、删除任务,实现对任务的管理
- 添加任务后,任务队列可以开始执行
- 任务队列执行任务方式为串行执行
任务
- 任务执行需要持续一段10s内随机的时间,执行过程通过sleep函数模拟
- 任务有三种状态,未执行,执行中,已结束
- 任务执行中,每隔1s输出一次当前进度
功能测试
在任务队列中添加2个任务并执行,所有任务完成后退出程序
其中任务执行时间为随机值,此处任务1运行3s,任务2运行2s,仅作示例
-
串行队列执行输入示例如下
添加任务 1
添加任务 2
串行任务队列开始执行,共有2个任务
任务1开始执行,将运行3秒
任务1已完成33%
任务1已完成66%
任务1已完成100%
任务1已结束
任务2开始执行,将运行2秒
任务2已完成50%
任务2已完成100%
任务2已结束
任务队列结束执行
代码如下:
#include <iostream>
#include <vector>
#include <thread>
#include <chrono>
#include <mutex>
class Task {
public:
enum class Status { NotStarted, InProgress, Completed };
Task(int id) : id_(id), status_(Status::NotStarted) {}
void execute() {
status_ = Status::InProgress;
int duration = rand() % 10 + 1; // Random duration between 1 and 10 seconds
for (int i = 1; i <= duration; ++i) {
std::this_thread::sleep_for(std::chrono::seconds(1));
//std::lock_guard<std::mutex> lock(mutex_);
std::cout << "任务" << id_ << "已完成" << i * 100 / duration << "%\n";
}
status_ = Status::Completed;
std::cout << "任务" << id_ << "已结束\n";
}
Status getStatus() const { return status_; }
private:
int id_;
Status status_;
//mutable std::mutex mutex_;
};
class TaskQueue {
public:
void addTask(Task task) {
tasks_.push_back(task);
}
void startExecution() {
std::cout << "串行任务队列开始执行,共有" << tasks_.size() << "个任务\n";
for (auto& task : tasks_) {
task.execute();
}
std::cout << "任务队列结束执行\n";
}
private:
std::vector<Task> tasks_;
};
int main() {
TaskQueue taskQueue;
taskQueue.addTask(Task(1));
taskQueue.addTask(Task(2));
taskQueue.startExecution();
return 0;
}
运行结果如下:
这个程序实现了一个简单的任务队列,其中任务类表示一个可执行的任务,具有状态(未开始、进行中、已完成)。任务队列类负责管理任务的添加和执行,执行方式为串行执行。每个任务的执行时间是随机的,并且在执行过程中会输出当前的进度信息。