17 class ParallelTaskRunner;
69 bool execute() {
return executeParallel(
true); }
75 virtual bool executeParallel(
bool parallel);
92 virtual od_int64 nrIterations()
const = 0;
95 virtual int maxNrThreads()
const;
112 void addToNrDone(
od_int64 increment);
117 void quickAddToNrDone(
od_int64 loopidx);
134 virtual bool doFinish(
bool success) {
return success; }
139 friend class ParallelTaskRunner;
179 #define mDeclareParallelCalcStd(uimsg) \ 181 bool reportprogress_; \ 182 void setReport(bool yn) { reportprogress_ = yn; } \ 183 od_int64 nrIterations() const { return sz_; } \ 184 uiString message() const { return uimsg; } \ 185 uiString nrDoneText() const { return sPosFinished(); } \ 187 #define mDefParallelCalcNoPars(clss,uimsg) \ 188 class clss : public ParallelTask \ 189 { mODTextTranslationClass(clss); \ 191 mDeclareParallelCalcStd(uimsg); \ 192 clss( od_int64 _sz_ ) : sz_(_sz_), reportprogress_(true) {} \ 194 #define mDefParallelCalc1Par(clss,uimsg,T1,v1) \ 195 class clss : public ParallelTask \ 196 { mODTextTranslationClass(clss); \ 198 mDeclareParallelCalcStd(uimsg); \ 200 clss( od_int64 _sz_, T1 _##v1##_ ) \ 201 : sz_(_sz_), reportprogress_(true), v1##_(_##v1##_) {} \ 203 #define mDefParallelCalc2Pars(clss,uimsg,T1,v1,T2,v2) \ 204 class clss : public ParallelTask \ 205 { mODTextTranslationClass(clss); \ 207 mDeclareParallelCalcStd(uimsg); \ 208 T1 v1##_; T2 v2##_; \ 209 clss( od_int64 _sz_, T1 _##v1##_, T2 _##v2##_ ) \ 210 : sz_(_sz_), reportprogress_(true) \ 211 , v1##_(_##v1##_), v2##_(_##v2##_) {} \ 213 #define mDefParallelCalc3Pars(clss,uimsg,T1,v1,T2,v2,T3,v3) \ 214 class clss : public ParallelTask \ 215 { mODTextTranslationClass(clss); \ 217 mDeclareParallelCalcStd(uimsg); \ 218 T1 v1##_; T2 v2##_; T3 v3##_; \ 219 clss( od_int64 _sz_, \ 220 T1 _##v1##_, T2 _##v2##_, T3 _##v3##_ ) \ 221 : sz_(_sz_), reportprogress_(true) \ 222 , v1##_(_##v1##_), v2##_(_##v2##_) , v3##_(_##v3##_) {} \ 224 #define mDefParallelCalc4Pars(clss,uimsg,T1,v1,T2,v2,T3,v3,T4,v4) \ 225 class clss : public ParallelTask \ 226 { mODTextTranslationClass(clss); \ 228 mDeclareParallelCalcStd(uimsg); \ 229 T1 v1##_; T2 v2##_; T3 v3##_; T4 v4##_; \ 230 clss( od_int64 _sz_, \ 231 T1 _##v1##_, T2 _##v2##_, T3 _##v3##_, T4 _##v4##_ ) \ 232 : sz_(_sz_), reportprogress_(true) \ 233 , v1##_(_##v1##_), v2##_(_##v2##_) \ 234 , v3##_(_##v3##_), v4##_(_##v4##_) {} \ 237 #define mDefParallelCalc5Pars(clss,uimsg,T1,v1,T2,v2,T3,v3,T4,v4,T5,v5) \ 238 class clss : public ParallelTask \ 239 { mODTextTranslationClass(clss); \ 241 mDeclareParallelCalcStd(uimsg); \ 242 T1 v1##_; T2 v2##_; T3 v3##_; T4 v4##_; T5 v5##_;\ 243 clss( od_int64 _sz_, T1 _##v1##_, T2 _##v2##_, T3 _##v3##_, \ 244 T4 _##v4##_, T5 _##v5##_ ) \ 245 : sz_(_sz_), reportprogress_(true) \ 246 , v1##_(_##v1##_), v2##_(_##v2##_) \ 247 , v3##_(_##v3##_), v4##_(_##v4##_), v5##_(_##v5##_) {} \ 249 #define mDefParallelCalc6Pars(clss,uimsg,T1,v1,T2,v2,T3,v3,T4,v4,T5,v5,T6,v6) \ 250 class clss : public ParallelTask \ 251 { mODTextTranslationClass(clss); \ 253 mDeclareParallelCalcStd(uimsg); \ 254 T1 v1##_; T2 v2##_; T3 v3##_; T4 v4##_; T5 v5##_; T6 v6##_;\ 255 clss( od_int64 _sz_, T1 _##v1##_, T2 _##v2##_, T3 _##v3##_, \ 256 T4 _##v4##_, T5 _##v5##_, T6 _##v6##_ ) \ 257 : sz_(_sz_), reportprogress_(true) \ 258 , v1##_(_##v1##_), v2##_(_##v2##_) \ 259 , v3##_(_##v3##_), v4##_(_##v4##_) \ 260 , v5##_(_##v5##_), v6##_(_##v6##_) {} \ 262 #define mDefParallelCalc7Pars(clss,uimsg,T1,v1,T2,v2,T3,v3,T4,v4,T5,v5, \ 264 class clss : public ParallelTask \ 265 { mODTextTranslationClass(clss); \ 267 mDeclareParallelCalcStd(uimsg); \ 268 T1 v1##_; T2 v2##_; T3 v3##_; T4 v4##_; \ 269 T5 v5##_; T6 v6##_; T7 v7##_; \ 270 clss( od_int64 _sz_, T1 _##v1##_, T2 _##v2##_, T3 _##v3##_, \ 271 T4 _##v4##_, T5 _##v5##_, T6 _##v6##_, T7 _##v7##_ ) \ 272 : sz_(_sz_), reportprogress_(true) \ 273 , v1##_(_##v1##_), v2##_(_##v2##_) \ 274 , v3##_(_##v3##_), v4##_(_##v4##_) \ 275 , v5##_(_##v5##_), v6##_(_##v6##_), v7##_(_##v7##_) {} \ 277 #define mDefParallelCalcBody(preop,impl,postop) \ 278 bool doWork( od_int64 start, od_int64 stop, int ) \ 281 for ( od_int64 idx=start; idx<=stop; idx++ ) \ 282 { impl; if ( reportprogress_ ) quickAddToNrDone(idx); } \ #define mExpClass(module)
Definition: commondefs.h:157
virtual bool stopAllOnFailure() const
Definition: paralleltask.h:101
static uiString sTrcFinished()
Definition: paralleltask.h:88
is an interface where processes can report their progress.
Definition: progressmeter.h:19
#define mODTextTranslationClass(clss)
Definition: uistring.h:37
ProgressMeter * progressmeter_
Definition: paralleltask.h:140
#define od_int64
Definition: plftypes.h:34
Definition: uistring.h:88
Threads::Atomic< int64_t > nrdone_
Definition: paralleltask.h:141
Generalization of a task that can be run in parallel.
Definition: paralleltask.h:64
virtual int minThreadSize() const
Definition: paralleltask.h:96
static uiString sPosFinished()
Definition: paralleltask.h:87
bool execute()
Definition: paralleltask.h:69
virtual bool doFinish(bool success)
Definition: paralleltask.h:134
int64_t totalNr() const
Definition: paralleltask.h:86
int64_t totalnrcache_
Definition: paralleltask.h:145
virtual bool doPrepare(int nrthreads)
Definition: paralleltask.h:132
Generalization of something (e.g. a computation) that needs to be done in multiple steps...
Definition: task.h:26
int64_t nrdonebigchunksz_
Definition: paralleltask.h:146