异步运行任务,并定期检查任务是否已完成。如果没有,您希望打印出任务的进度。但是,您提供的代码存在一些问题:
1。“TaskRun”类未在您提供的代码段中定义。请确保其定义正确,并且“run”方法是“TaskRun”的成员函数。
2.“taskManage”对象未在代码段中定义。请确保它已正确初始化,并且可以在代码范围内访问。
3.“relSimVec”对象未在代码段中定义。请确保它已正确初始化,并且可以在代码范围内访问。
4.代码段中未定义“totSimNum”变量。请确保它已正确初始化,并且可以在代码范围内访问。
假设“TaskRun”类和“taskManage”对象定义正确,下面是代码的更正版本:
#include <iostream>
#include <future>
#include <chrono>
// Assuming TaskRun and TaskManage are defined as follows:
class TaskRun {
public:
TaskRun(MPS_Alg mps_alg, TaskManage* taskManage, std::vector<RelSim>* relSimVec)
: mps_alg(mps_alg), taskManage(taskManage), relSimVec(relSimVec) {}
void run() {
// Perform the task here
}
private:
MPS_Alg mps_alg;
TaskManage* taskManage;
std::vector<RelSim>* relSimVec;
};
class TaskManage {
public:
int simCellNum;
// Other members and methods...
};
// Assuming MPS_Alg and RelSim are defined elsewhere
int main() {
// Assuming mps_alg, relSimVec, and totSimNum are properly defined
MPS_Alg mps_alg;
std::vector<RelSim> relSimVec;
int totSimNum = 100; // Example total number of simulations
// Create TaskManage and TaskRun instances
TaskManage taskManage;
TaskRun taskRun(mps_alg, &taskManage, &relSimVec);
// Launch task and get result future
auto rf = std::async(std::launch::async, &TaskRun::run, &taskRun);
// Check if the task has finished every 5 seconds
while (rf.wait_for(std::chrono::seconds(5)) == std::future_status::timeout) {
std::cout << taskManage.simCellNum << "/" << totSimNum << std::endl;
}
// Ensure the task is finished
rf.get();
return 0;
}
请将占位符替换为“MPS_Alg”、“RelSim”和“TaskManage”的实际定义。此外,请确保“TaskRun”的“run”方法执行实际任务,并相应地更新“taskManage.simCellNum”。