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(QString name):QVPropertyHolder(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
00042 void QVWorker::run()
00043 {
00044 qDebug() << "QVWorker::run()";
00045
00046 while(status != Finished)
00047 {
00048
00049
00050 qApp->processEvents();
00051
00052 qDebug() << "QVWorker::iterate()";
00053 qDebug() << "QVWorker::iterate(): iteration" << numIterations;
00054
00055
00056
00057
00058
00059
00060 cpuStat.step();
00061
00062 switch (status)
00063 {
00064 case RunningOneStep:
00065 qDebug() << "QVWorker::iterate(): RunningOneStep";
00066 status = Paused;
00067
00068 case Running:
00069 iterationTime.start();
00070 emit startIteration();
00071 timeFlag("System");
00072 readInputProperties();
00073 iterate();
00074 writeOutputProperties();
00075 numIterations++;
00076 emit endIteration();
00077 curms = iterationTime.elapsed();
00078 if(minms > curms)
00079 usleep(1000*(minms-curms));
00080
00081
00082
00083 break;
00084
00085 case Paused:
00086 qDebug() << "QVWorker::iterate(): Paused";
00087 usleep(100);
00088 break;
00089
00090 case Finished:
00091 qDebug() << "QVWorker::iterate(): Finished";
00092 break;
00093 }
00094 qDebug() << "QVWorker::iterate() <- return";
00095 }
00096
00097 unlink();
00098 qDebug() << "QVWorker::run() <- return";
00099 }