diff --git a/src/core/QueuedBackgroundTask.cpp b/src/core/QueuedBackgroundTask.cpp new file mode 100644 index 0000000..309929b --- /dev/null +++ b/src/core/QueuedBackgroundTask.cpp @@ -0,0 +1 @@ +#include "QueuedBackgroundTask.h" diff --git a/src/core/QueuedBackgroundTask.h b/src/core/QueuedBackgroundTask.h new file mode 100644 index 0000000..a4dcdb4 --- /dev/null +++ b/src/core/QueuedBackgroundTask.h @@ -0,0 +1,52 @@ +#pragma once + +#include +#include + +/** Base class for an object that can be queued for execution in the background. + * + * It is meaned for long running processes the end user might want to abort, pause and check progress on. + */ +class QueuedBackgroundTask: public QRunnable +{ + /** Task should exit it's run method but remember it's state, it might be resumed later. + */ + void requestPause(); + + /** Request to stop running and forget progress + */ + void requestAbort(); + + QString getProgressInfo(); +}; + +class BackgroundTaskInfo { +public: +}; + +/** Manages objects of type QueuedBackgroundTask + * + * The basic operation of this queue is hand everything directly of to the default + * threadpool and that will decide when to run each task. But extra functions are + * provided to control tasks to allow the program to have a UI for controlling the tasks + */ +class BackgroundTaskQueue { + +public: + + /** Returns a list of tasks in the queue and their progress. + * + * When building a UI to show realtime activity then make sure to first register the update events + * then get the snapshot. After that you can use the events to update the contents of the UI. + */ + QVector getTaskInfoSnapshort(); + + void pauseTask( ); + + /** Resume a paused task + */ + void resumeTask( ); + + void abortTask( ); + +};