CommandDispatcher.h 790 Bytes
Newer Older
Valentin Platzgummer's avatar
Valentin Platzgummer committed
1 2 3
#ifndef COMMANDDISPATCHER_H
#define COMMANDDISPATCHER_H

Valentin Platzgummer's avatar
Valentin Platzgummer committed
4 5
#include <QThread>
#include <QVariant>
Valentin Platzgummer's avatar
Valentin Platzgummer committed
6

Valentin Platzgummer's avatar
Valentin Platzgummer committed
7 8 9 10 11
#include "Task.h"

namespace nemo_interface {

class CommandDispatcher : public QThread {
Valentin Platzgummer's avatar
Valentin Platzgummer committed
12
public:
Valentin Platzgummer's avatar
Valentin Platzgummer committed
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
  CommandDispatcher();

  bool interruptionPoint(); // thread safe

  std::future<QVariant> dispatch(const Task &c);     // thread safe
  std::future<QVariant> dispatchNext(const Task &c); // thread safe
  void clear();                                      // thread safe
  void stop();                                       // thread safe
  bool running();                                    // thread safe

private:
  std::atomic_bool _running;
  std::condition_variable _condVar;
  QList<Task> _queue;
  std::mutex _queueMutex;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
28
};
Valentin Platzgummer's avatar
Valentin Platzgummer committed
29
} // namespace nemo_interface
Valentin Platzgummer's avatar
Valentin Platzgummer committed
30 31

#endif // COMMANDDISPATCHER_H