OpendTect  6.6
task.h
Go to the documentation of this file.
1 #pragma once
2 
3 /*+
4 ________________________________________________________________________
5 
6  (C) dGB Beheer B.V.; (LICENSE) http://opendtect.org/OpendTect_license.txt
7  Author: A.H.Bril/K.Tingdahl
8  Date: 13-10-1999
9  RCS: $Id$
10 ________________________________________________________________________
11 
12 -*/
13 
14 #include "basicmod.h"
15 #include "namedobj.h"
16 #include "objectset.h"
17 #include "threadlock.h"
18 #include "uistring.h"
19 
20 class ProgressMeter;
21 namespace Threads { class ConditionVar; }
22 
23 
29 public:
30 
31  virtual ~Task();
32 
33  virtual void setProgressMeter(ProgressMeter*) {}
35 
36  virtual uiString uiMessage() const;
37  virtual uiString uiNrDoneText() const;
38  virtual od_int64 nrDone() const { return -1; }
44  virtual od_int64 totalNr() const { return -1; }
47  virtual uiRetVal errorWithDetails() const { return uiRetVal(uiMessage()); }
48 
49  static uiString stdNrDoneText() { return tr("Nr Done"); }
50  static uiString uiStdNrDoneText() { return tr("Nr Done"); }
51  //< will disappear
52 
53  virtual bool execute() = 0;
54 
55  enum Control { Run, Pause, Stop };
56  virtual void enableWorkControl(bool=true);
58  bool workControlEnabled() const;
59  virtual void controlWork(Control);
60  virtual Control getState() const;
61 
62 protected:
63 
64  Task(const char* nm=nullptr);
65  virtual bool shouldContinue();
69 
70 private:
71 
72  //In 7.0, this function will return a uiString
73  virtual const char* message() const { return nullptr; }
74  //In 7.0, this function will return a uiString
75  virtual const char* nrDoneText() const { return nullptr; }
76 
77 };
78 
79 
82 mExpClass(Basic) TaskGroup : public Task
83 {
84 public:
87 
88  void addTask( Task* );
89  //Becomes mine
90 
91  void setParallel(bool);
92  void showCumulativeCount( bool yn ) { cumulativecount_ = yn; }
93  void setEmpty();
95 
97  virtual od_int64 nrDone() const;
98  virtual od_int64 totalNr() const;
99 
102 
103  virtual bool execute();
104 
105  void enableWorkControl(bool=true);
106  virtual void controlWork(Control);
107  virtual Control getState() const;
108 
109 protected:
110 
112  int curtask_;
113  bool cumulativecount_ = false;
114 
116 
117 };
118 
119 
125 {
126 public:
127  SequentialTask(const char* nm=nullptr);
128  virtual ~SequentialTask();
129 
131  ProgressMeter* progressMeter() { return progressmeter_; }
132  const ProgressMeter* progressMeter() const { return progressmeter_; }
133 
134  virtual int doStep();
141  static int ErrorOccurred() { return -1; }
142  static int Finished() { return 0; }
143  static int MoreToDo() { return 1; }
144  static int WarningAvailable() { return 2; }
145 
146  bool execute();
147 
148 protected:
149 
150  virtual int nextStep() = 0;
159 };
160 
161 
162 
170 {
171 public:
172  static bool execute(TaskRunner* tr, Task& );
174 
175  TaskRunner() : execres_(false) {}
176  virtual ~TaskRunner() {}
177 
178  virtual bool execute(Task& t)
179  { return (execres_ = t.execute()); }
180  virtual bool execResult() const { return execres_; }
181 
182 protected:
183 
184  bool execres_;
185 
186 };
187 
188 
Task::totalNr
virtual int64_t totalNr() const
Definition: task.h:44
TaskRunner::execute
static bool execute(TaskRunner *tr, Task &)
Taskrunner may be zero.
Task::enableWorkControl
virtual void enableWorkControl(bool=true)
Must be called before execute()
Task::shouldContinue
virtual bool shouldContinue()
TaskRunner::execres_
bool execres_
Definition: task.h:184
TaskGroup::addTask
void addTask(Task *)
TaskGroup::tasks_
ObjectSet< Task > tasks_
Definition: task.h:111
SequentialTask::progressmeter_
ProgressMeter * progressmeter_
Definition: task.h:157
NamedCallBacker
CallBacker object with a name. Use if you want your object to be able to send and receive CallBack's,...
Definition: namedobj.h:72
uistring.h
TaskGroup::setParallel
void setParallel(bool)
ObjectSet< Task >
Task::message
virtual const char * message() const
Definition: task.h:73
SequentialTask::MoreToDo
static int MoreToDo()
Definition: task.h:143
SequentialTask::WarningAvailable
static int WarningAvailable()
Definition: task.h:144
od_int64
#define od_int64
Definition: plftypes.h:35
TaskGroup::lock_
Threads::Lock lock_
Definition: task.h:115
ProgressMeter
is an interface where processes can report their progress.
Definition: progressmeter.h:21
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
namedobj.h
TaskRunner::execute
virtual bool execute(Task &t)
Definition: task.h:178
Task::nrDone
virtual int64_t nrDone() const
Definition: task.h:38
Task::uiMessage
virtual uiString uiMessage() const
will be message() again in 7.x
TaskGroup::~TaskGroup
~TaskGroup()
uiRetVal
Definition: uistringset.h:105
Task::Control
Control
Definition: task.h:55
Task::uiNrDoneText
virtual uiString uiNrDoneText() const
will be nrDoneText() in 7.x
TaskGroup::setEmpty
void setEmpty()
TaskRunner::execResult
virtual bool execResult() const
Definition: task.h:180
TaskGroup::controlWork
virtual void controlWork(Control)
mODTextTranslationClass
#define mODTextTranslationClass(clss)
Definition: uistring.h:40
TaskGroup::nrDone
virtual int64_t nrDone() const
Task::controlWork
virtual void controlWork(Control)
Task::getState
virtual Control getState() const
Task::Task
Task(const char *nm=nullptr)
TaskGroup
A collection of tasks, that behave as a single task.
Definition: task.h:83
TaskGroup::setProgressMeter
void setProgressMeter(ProgressMeter *)
Must be called before execute()
TaskGroup::getTasks
void getTasks(TaskGroup &)
SequentialTask::execute
bool execute()
SequentialTask::~SequentialTask
virtual ~SequentialTask()
Task::~Task
virtual ~Task()
SequentialTask::progressMeter
const ProgressMeter * progressMeter() const
Definition: task.h:132
Task
Generalization of something (e.g. a computation) that needs to be done in multiple steps.
Definition: task.h:28
SequentialTask::SequentialTask
SequentialTask(const char *nm=nullptr)
Task::stdNrDoneText
static uiString stdNrDoneText()
Definition: task.h:49
TaskRunner::TaskRunner
TaskRunner()
Definition: task.h:175
TaskGroup::uiMessage
uiString uiMessage() const
will be message() again in 7.x
Threads::ConditionVar
Is an object that faciliates many threads to wait for something to happen.
Definition: thread.h:110
TaskRunner
Class that can execute a task.
Definition: task.h:170
Task::errorWithDetails
virtual uiRetVal errorWithDetails() const
Definition: task.h:47
Task::workcontrolcondvar_
Threads::ConditionVar * workcontrolcondvar_
Definition: task.h:68
SequentialTask::Finished
static int Finished()
Definition: task.h:142
TaskGroup::curtask_
int curtask_
Definition: task.h:112
TaskGroup::getState
virtual Control getState() const
SequentialTask::lastupdate_
int lastupdate_
Definition: task.h:158
uiString
String that is able to hold international (UTF-8) strings for the user interface.
Definition: uistring.h:121
Task::uiStdNrDoneText
static uiString uiStdNrDoneText()
Definition: task.h:50
threadlock.h
Task::control_
Control control_
Definition: task.h:67
Task::nrDoneText
virtual const char * nrDoneText() const
Definition: task.h:75
TaskGroup::uiNrDoneText
uiString uiNrDoneText() const
will be nrDoneText() in 7.x
TaskGroup::execute
virtual bool execute()
Task::setProgressMeter
virtual void setProgressMeter(ProgressMeter *)
Must be called before execute()
Definition: task.h:33
Task::execute
virtual bool execute()=0
TaskGroup::TaskGroup
TaskGroup()
SequentialTask::progressMeter
ProgressMeter * progressMeter()
Definition: task.h:131
SequentialTask::setProgressMeter
void setProgressMeter(ProgressMeter *)
Must be called before execute()
TaskGroup::totalNr
virtual int64_t totalNr() const
SequentialTask::ErrorOccurred
static int ErrorOccurred()
Definition: task.h:141
TaskGroup::enableWorkControl
void enableWorkControl(bool=true)
Must be called before execute()
SequentialTask::doStep
virtual int doStep()
TaskGroup::showCumulativeCount
void showCumulativeCount(bool yn)
Definition: task.h:92
Threads
interface to threads that should be portable.
Definition: atomic.h:23
Threads::Lock
A lock of a type that (hopefully) suits your needs. To use it, you need the Locker class.
Definition: threadlock.h:53
objectset.h
Task::workControlEnabled
bool workControlEnabled() const
SequentialTask
The generalization of something (e.g. a computation) where the steps must be done in sequence,...
Definition: task.h:125
SequentialTask::nextStep
virtual int nextStep()=0
TaskRunner::~TaskRunner
virtual ~TaskRunner()
Definition: task.h:176

Generated at for the OpendTect seismic interpretation project. Copyright (C): dGB Beheer B.V. 1995-2021