diff --git a/app/task/task.h b/app/task/task.h index 835c009fd..a2b516c1f 100644 --- a/app/task/task.h +++ b/app/task/task.h @@ -93,6 +93,7 @@ public slots: bool Start() { start_time_ = QDateTime::currentMSecsSinceEpoch(); + emit Started(start_time_); bool ret = Run(); @@ -150,6 +151,8 @@ protected: } signals: + void Started(qint64 start_time); + /** * @brief Signal emitted whenever progress is made * diff --git a/app/task/taskmanager.cpp b/app/task/taskmanager.cpp index 5d2be1036..9165bb135 100644 --- a/app/task/taskmanager.cpp +++ b/app/task/taskmanager.cpp @@ -29,6 +29,7 @@ TaskManager* TaskManager::instance_ = nullptr; TaskManager::TaskManager() { + thread_pool_.setMaxThreadCount(1); } TaskManager::~TaskManager() @@ -95,9 +96,9 @@ void TaskManager::AddTask(Task* t) // Run task concurrently watcher->setFuture( #if QT_VERSION_MAJOR >= 6 - QtConcurrent::run(&Task::Start, t) + QtConcurrent::run(&thread_pool_, &Task::Start, t) #else - QtConcurrent::run(t, &Task::Start) + QtConcurrent::run(&thread_pool_, t, &Task::Start) #endif ); diff --git a/app/widget/taskview/elapsedcounterwidget.cpp b/app/widget/taskview/elapsedcounterwidget.cpp index 288bae977..8300be9f4 100644 --- a/app/widget/taskview/elapsedcounterwidget.cpp +++ b/app/widget/taskview/elapsedcounterwidget.cpp @@ -22,6 +22,7 @@ #include #include +#include #include "common/timecodefunctions.h" @@ -80,7 +81,7 @@ void ElapsedCounterWidget::UpdateTimers() double ms_per_progress_unit = elapsed_ms / last_progress_; double remaining_progress = 1.0 - last_progress_; - remaining_ms = qRound64(ms_per_progress_unit * remaining_progress); + remaining_ms = std::ceil(ms_per_progress_unit * remaining_progress); } else { elapsed_ms = 0; remaining_ms = 0; diff --git a/app/widget/taskview/elapsedcounterwidget.h b/app/widget/taskview/elapsedcounterwidget.h index 809853fd0..ad1901c60 100644 --- a/app/widget/taskview/elapsedcounterwidget.h +++ b/app/widget/taskview/elapsedcounterwidget.h @@ -37,8 +37,9 @@ public: void SetProgress(double d); - void Start(); +public slots: void Start(qint64 start_time); + void Start(); public slots: void Stop(); diff --git a/app/widget/taskview/taskviewitem.cpp b/app/widget/taskview/taskviewitem.cpp index d63e8f42b..eaa7f04e0 100644 --- a/app/widget/taskview/taskviewitem.cpp +++ b/app/widget/taskview/taskviewitem.cpp @@ -72,9 +72,9 @@ TaskViewItem::TaskViewItem(Task* task, QWidget *parent) : // Set up elapsed timer status_stack_->setCurrentWidget(elapsed_timer_lbl_); - elapsed_timer_lbl_->Start(task_->GetStartTime()); // Connect to the task + connect(task_, &Task::Started, elapsed_timer_lbl_, qOverload(&ElapsedCounterWidget::Start)); connect(task_, &Task::ProgressChanged, this, &TaskViewItem::UpdateProgress); connect(cancel_btn_, &QPushButton::clicked, this, [this] { emit TaskCancelled(task_); }); }