00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00024
00025 #include <QDebug>
00026 #include <QMutex>
00027 #include <QWaitCondition>
00028 #include <QApplication>
00029
00030 #include <qvcore/qvworker.h>
00031
00032 QVWorker::QVWorker(const QString name):QVPropertyContainer(name), cpuStat(), numIterations(0), status(Running), triggerList(), minms(0)
00033 {
00034 qDebug() << "QVWorker::QVWorker(" << name << ")";
00035 Q_ASSERT_X(qvApp != NULL, "QVWorker::QVWorker()", "QVApplication doesn't exists");
00036 addProperty<bool>("print stats", inputFlag, false, "Enables realtime stats console output for worker");
00037 cpuStat.printStatsToConsole(getPropertyValue<bool>("print stats"));
00038 qDebug() << "QVWorker::QVWorker(" << name << ") <- return";
00039 };
00040
00041 void QVWorker::run()
00042 {
00043 qDebug() << "QVWorker::run()";
00044
00045 while(status != Finished)
00046 {
00047
00048
00049 qApp->processEvents();
00050
00051 qDebug() << "QVWorker::iterate()";
00052 qDebug() << "QVWorker::iterate(): iteration" << numIterations;
00053
00054
00055
00056
00057
00058
00059 cpuStat.step();
00060
00061 switch (status)
00062 {
00063 case RunningOneStep:
00064 qDebug() << "QVWorker::iterate(): RunningOneStep";
00065 status = Paused;
00066
00067 case Running:
00068 iterationTime.start();
00069 emit startIteration();
00070 timeFlag("System");
00071 readInputProperties();
00072 iterate();
00073 writeOutputProperties();
00074 numIterations++;
00075 emit endIteration();
00076 curms = iterationTime.elapsed();
00077 if(minms > curms)
00078 usleep(1000*(minms-curms));
00079
00080
00081
00082 break;
00083
00084 case Paused:
00085 qDebug() << "QVWorker::iterate(): Paused";
00086 usleep(100);
00087 break;
00088
00089 case Finished:
00090 qDebug() << "QVWorker::iterate(): Finished";
00091 break;
00092 }
00093 qDebug() << "QVWorker::iterate() <- return";
00094 }
00095
00096 unlink();
00097 qDebug() << "QVWorker::run() <- return";
00098 }