Using std::atomic for insight worker task state and progress percentage.

Tidying TaskProgressIndicator widget
This commit is contained in:
Nav
2023-03-18 19:02:15 +00:00
parent 20751b3fb9
commit 3d3d5ab7c1
6 changed files with 48 additions and 20 deletions

View File

@@ -68,7 +68,7 @@ namespace Bloom
);
std::move(dataSegment.begin(), dataSegment.end(), std::back_inserter(*this->data));
emit this->progressUpdate(static_cast<int>(
this->setProgressPercentage(static_cast<std::uint8_t>(
(static_cast<float>(i) + 1) / (static_cast<float>(readsRequired + 1) / 100)
));
}

View File

@@ -14,8 +14,11 @@ namespace Bloom
try {
this->state = InsightWorkerTaskState::STARTED;
emit this->started();
this->run(targetControllerService);
this->state = InsightWorkerTaskState::COMPLETED;
this->setProgressPercentage(100);
emit this->completed();
} catch (std::exception& exception) {
@@ -26,4 +29,9 @@ namespace Bloom
emit this->finished();
}
void InsightWorkerTask::setProgressPercentage(std::uint8_t percentage) {
this->progressPercentage = percentage;
emit this->progressUpdate(this->progressPercentage);
}
}

View File

@@ -18,6 +18,9 @@ namespace Bloom
COMPLETED,
};
static_assert(std::atomic<InsightWorkerTaskState>::is_always_lock_free);
static_assert(std::atomic<std::uint8_t>::is_always_lock_free);
class InsightWorkerTask: public QObject
{
Q_OBJECT
@@ -25,7 +28,8 @@ namespace Bloom
public:
using IdType = std::uint64_t;
const InsightWorkerTask::IdType id = ++(InsightWorkerTask::lastId);
InsightWorkerTaskState state = InsightWorkerTaskState::CREATED;
std::atomic<InsightWorkerTaskState> state = InsightWorkerTaskState::CREATED;
std::atomic<std::uint8_t> progressPercentage = 0;
InsightWorkerTask();
@@ -55,7 +59,7 @@ namespace Bloom
* @param progressPercentage
* The task's current progress.
*/
void progressUpdate(int progressPercentage);
void progressUpdate(std::uint8_t progressPercentage);
/**
* The InsightWorkerTask::completed() signal will be emitted once the task has successfully completed.
@@ -76,6 +80,7 @@ namespace Bloom
protected:
virtual void run(Services::TargetControllerService& targetControllerService) = 0;
void setProgressPercentage(std::uint8_t percentage);
private:
static inline std::atomic<InsightWorkerTask::IdType> lastId = 0;

View File

@@ -49,7 +49,7 @@ namespace Bloom
);
std::move(dataSegment.begin(), dataSegment.end(), std::back_inserter(data));
emit this->progressUpdate(static_cast<int>(
this->setProgressPercentage(static_cast<std::uint8_t>(
(static_cast<float>(i) + 1) / (static_cast<float>(readsRequired) / 100)
));
}