add,计划采集13:
优化逻辑
This commit is contained in:
@ -5,6 +5,7 @@
|
||||
#include <QFile>
|
||||
#include <QTextStream>
|
||||
#include <QDebug>
|
||||
#include <algorithm>
|
||||
|
||||
// ==================== 公共接口实现 ====================
|
||||
|
||||
@ -88,9 +89,9 @@ QString TimedDataCollectionDataStructuresReaderWriter::taskStatusToString(TaskSt
|
||||
|
||||
TaskStatus TimedDataCollectionDataStructuresReaderWriter::stringToTaskStatus(const QString& str)
|
||||
{
|
||||
if (str == "Running") return TaskStatus::Running;
|
||||
if (str == "Finished") return TaskStatus::Finished;
|
||||
return TaskStatus::Waiting;
|
||||
//if (str == "Running") return TaskStatus::Running;
|
||||
//if (str == "Finished") return TaskStatus::Finished;
|
||||
return TaskStatus::default;
|
||||
}
|
||||
|
||||
QString TimedDataCollectionDataStructuresReaderWriter::subTaskTypeToString(SubTaskType type)
|
||||
@ -135,8 +136,8 @@ QJsonObject TimedDataCollectionDataStructuresReaderWriter::subTaskToJson(const S
|
||||
bool TimedDataCollectionDataStructuresReaderWriter::jsonToSubTask(const QJsonObject& json, SubTask& subTask)
|
||||
{
|
||||
subTask.type = stringToSubTaskType(json["type"].toString());
|
||||
subTask.startTime = QDateTime::fromString(json["startTime"].toString(), Qt::ISODate);
|
||||
subTask.endTime = QDateTime::fromString(json["endTime"].toString(), Qt::ISODate);
|
||||
subTask.startTime = QDateTime::fromString(QString(), Qt::ISODate);
|
||||
subTask.endTime = QDateTime::fromString(QString(), Qt::ISODate);
|
||||
subTask.durationMinutes = json["durationMinutes"].toDouble();
|
||||
subTask.estimatedDurationMinutes = json["estimatedDurationMinutes"].toDouble();
|
||||
subTask.pathLineFilePath = json["pathLineFilePath"].toString();
|
||||
@ -158,6 +159,7 @@ QJsonObject TimedDataCollectionDataStructuresReaderWriter::timedTaskToJson(const
|
||||
obj["startTime"] = task.startTime.toString(Qt::ISODate);
|
||||
obj["endTime"] = task.endTime.toString(Qt::ISODate);
|
||||
obj["durationMinutes"] = task.durationMinutes;
|
||||
obj["estimatedDurationMinutes"] = task.estimatedDurationMinutes;
|
||||
obj["savePath"] = task.savePath;
|
||||
obj["status"] = taskStatusToString(task.status);
|
||||
obj["HalogenLampPreheatingTime_Minute"] = task.HalogenLampPreheatingTime_Minute;
|
||||
@ -175,9 +177,10 @@ bool TimedDataCollectionDataStructuresReaderWriter::jsonToTimedTask(const QJsonO
|
||||
{
|
||||
task.id = json["id"].toInt();
|
||||
task.scheduledTime = QDateTime::fromString(json["scheduledTime"].toString(), Qt::ISODate);
|
||||
task.startTime = QDateTime::fromString(json["startTime"].toString(), Qt::ISODate);
|
||||
task.endTime = QDateTime::fromString(json["endTime"].toString(), Qt::ISODate);
|
||||
task.startTime = QDateTime::fromString(QString(), Qt::ISODate);
|
||||
task.endTime = QDateTime::fromString(QString(), Qt::ISODate);
|
||||
task.durationMinutes = json["durationMinutes"].toDouble();
|
||||
task.estimatedDurationMinutes = json["estimatedDurationMinutes"].toDouble();
|
||||
task.savePath = json["savePath"].toString();
|
||||
task.status = stringToTaskStatus(json["status"].toString());
|
||||
task.HalogenLampPreheatingTime_Minute = json["HalogenLampPreheatingTime_Minute"].toDouble();
|
||||
@ -220,6 +223,10 @@ void TaskExecutor::execute(const TimedTask& task)
|
||||
|
||||
m_task = task;
|
||||
m_task.startTime = QDateTime::currentDateTime();
|
||||
m_task.status = TaskStatus::Running;
|
||||
|
||||
emit taskUpdated(m_task);
|
||||
|
||||
|
||||
m_currentSubTaskIndex = 0;
|
||||
m_isRunning = true;
|
||||
@ -293,6 +300,7 @@ void TaskExecutor::onSequenceComplete(int status)
|
||||
qDebug() << "TaskExecutor: subtask "<< m_currentSubTaskIndex<< " time consuming(Minutes): "<< subTask.durationMinutes;
|
||||
|
||||
emit subTaskFinished(m_currentSubTaskIndex, subTask.type, (status == 0));
|
||||
emit taskUpdated(m_task);
|
||||
}
|
||||
|
||||
//
|
||||
@ -315,6 +323,8 @@ void TaskExecutor::onSequenceComplete(int status)
|
||||
int nestSubTaskIndex = m_currentSubTaskIndex + 1;
|
||||
if (nestSubTaskIndex >= m_task.subTasks.size())
|
||||
{
|
||||
emit switchD65LampSignal(0);
|
||||
emit switchSlrSignal(0);
|
||||
emit switchHalogenLampSignal(0);
|
||||
return;
|
||||
}
|
||||
@ -501,24 +511,53 @@ void TaskScheduler::stop()
|
||||
|
||||
void TaskScheduler::checkTasks()
|
||||
{
|
||||
// 检查是否所有任务都不需要执行
|
||||
bool allTasksDone = std::all_of(m_tasks.begin(), m_tasks.end(),
|
||||
[](const TimedTask& task) {
|
||||
return task.status != TaskStatus::Waiting;
|
||||
});
|
||||
|
||||
if (allTasksDone)
|
||||
{
|
||||
std::cerr << "TaskScheduler::checkTasks,没有任务等待执行,停止调度器" << std::endl;
|
||||
stop();
|
||||
}
|
||||
|
||||
QDateTime now = QDateTime::currentDateTime();
|
||||
|
||||
for (auto& task : m_tasks) {
|
||||
if (m_currentTaskId >= 0)//有任务正在执行
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (auto& task : m_tasks)
|
||||
{
|
||||
if (task.status != TaskStatus::Waiting) continue;
|
||||
|
||||
// 超过计划时间1分钟以上,认为任务已过时,跳过
|
||||
if (task.scheduledTime.addSecs(60) < now) {
|
||||
// 超过计划时间threSecs,认为任务已过时,跳过
|
||||
qint64 threSecs = 30;
|
||||
if (task.scheduledTime.addSecs(threSecs) < now)
|
||||
{
|
||||
std::cerr << "TaskScheduler::checkTasks,任务已过时,跳过:" << task.id << std::endl;
|
||||
task.status = TaskStatus::Finished;
|
||||
task.status = TaskStatus::Timeout;
|
||||
for (size_t i = 0; i < task.subTaskCount(); i++)
|
||||
{
|
||||
task.subTasks[i].status = TaskStatus::Timeout;
|
||||
}
|
||||
|
||||
emit taskDataChanged(task);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (task.scheduledTime > now) continue;
|
||||
|
||||
// 到达计划时间,启动任务
|
||||
std::cerr << "TaskScheduler::checkTasks,到达计划时间,启动任务" << std::endl;
|
||||
executeTask(task);
|
||||
break; // 一次只执行一个任务
|
||||
qint64 fireThreSecs = 5;
|
||||
if (task.scheduledTime.addSecs(-1*fireThreSecs) < now && task.scheduledTime.addSecs(fireThreSecs) > now)// 到达计划时间,启动任务
|
||||
{
|
||||
std::cerr << "TaskScheduler::checkTasks,到达计划时间,启动任务" << std::endl;
|
||||
executeTask(task);
|
||||
break; // 一次只执行一个任务
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -561,10 +600,10 @@ void TaskScheduler::executeTask(TimedTask& task)
|
||||
{
|
||||
qDebug() << "TaskScheduler: Executing task" << task.id;
|
||||
|
||||
updateTaskStatus(task.id, TaskStatus::Running);
|
||||
//updateTaskStatus(task.id, TaskStatus::Running);
|
||||
m_currentTaskId = task.id;
|
||||
|
||||
emit taskStarted(task.id);
|
||||
//emit taskStarted(task.id);
|
||||
|
||||
// 创建任务执行器
|
||||
m_currentExecutor = new TaskExecutor(this);
|
||||
|
||||
Reference in New Issue
Block a user