class MThread : public QThread{ Q_OBJECT public: MThread(double x, unsigned int stackSize = 0); virtual ~MThread(); double getX(); void setX (double x); protected: void run(); private: double x; };
MThread::MThread ( double x, unsigned int stackSize) :QThread( stackSize){ this->x=x; this->run();}void MThread::setX ( double x ){ this->x=x;}double MThread::getX(){ return this->x;}void MThread::run(){ long i; int j=0; int progress; for ( i=0;i<1000000;i++ ) { setX ( sin ( this->getX() ) ); j+=1; if ( j==10000 ) { progress=dlgMain->taskProgress->progress(); dlgMain->taskProgress->setProgress ( progress+1 ); j=0; } } QString ds = QString( "'E' format, precision 3, gives %1" ) .arg( x, 0, 'E', 3 ); dlgMain->logAdd(ds);}
C++ (Qt)MThread::MThread ( double x, unsigned int stackSize) :QThread( stackSize){ this->x=x; this->run();}
ProgressEvent::ProgressEvent():QCustomEvent(progressChange) //в .h файле есть перечисление, в котором указан номер progressChange'а{}int ProgressEvent::getProgress(){ return this->progress;}void ProgressEvent::setProgress(int p){ this->progress=p;}MThread::MThread ( double x, unsigned int stackSize) :QThread( stackSize){ this->x=x; this->start();}void MThread::setX ( double x ){ this->x=x;}double MThread::getX(){ return this->x;}void MThread::run(){ long i; QString s; int progress=0; qDebug("start computing"); for ( i=0;i<100;i++ ) { qDebug("Another step"); this->x=sin(this->x); progress+=1; ProgressEvent *e = new ProgressEvent; e->setProgress(progress); QApplication::postEvent(dlgMain,e); qDebug("Send event"); this->sleep(1); qDebug("Sleep over"); } progress+=1; ProgressEvent *e = new ProgressEvent; e->setProgress(progress); QApplication::postEvent(dlgMain,e); QString ds = QString( "'E' format, precision 3, gives %1" ) .arg( x, 0, 'E', 3 ); dlgMain->logAdd(ds); this->exit();}
C++ (Qt)while( m_running ){ if( m_pause ) continue; Считаем следующую итерацию Отправляем сообщение на обновление прогрессбара. Если все посчитали, выходим из цикла (по break или m_running = false)}
C++ (Qt)while( m_running ){ if( m_pause ) continue; ....}
C++ (Qt)while( m_running ){ if( m_pause ) { msleep(50); continue; } ....}