Qt потоки синхронизация.
{
childThreadA.start();
childThreadB.start();
childThreadA.wait();
childThreadB.wait();
}
В смысле продолжится?
[QUOTE=http://doc.trolltech.com/3.3/qthread.html#wait]
bool QThread::wait ( unsigned long time = ULONG_MAX )
A thread calling this function will block until either of these conditions is met:
- The thread associated with this QThread object has finished execution (i.e. when it returns from run()). This function will return TRUE if the thread has finished. It also returns TRUE if the thread has not been started yet.
- time milliseconds has elapsed. If time is ULONG_MAX (the default), then the wait will never timeout (the thread must return from run()). This function will return FALSE if the wait timed out.
А ULONG_MAX это порядка 50 дней... если я правильно пользовался калькулятором...
К тому же судя по документации, это значение означает что никакого отсчета не будет, дочерний поток обязан вернуться из run.
А ULONG_MAX это порядка 50 дней
хоть 100 дней - никакого отношения к синхронизации это не имеет. Учитесь пользовать инструменты по назначению.
Во первых - можно использовать QApplication::processEvents
Во вторых QProcessDialog
В третьих - hasPendingEvents
Ну и естественно использование потокобезопасных классов и т.п. например QMutex.
Во первых - можно использовать QApplication::processEvents
Во вторых QProcessDialog
В третьих - hasPendingEvents
Ну и естественно использование потокобезопасных классов и т.п. например QMutex.
А вы вообще читали, что нужно топик-стартеру?
Я читать умею. Поэтому и написал о том, что быдлокодерством заниматься не обязательно.
Предложите свой вариант.
И в чем кстати быдлокодерство в моем? Инетересно исключительно в целях повышения образованности.
#define CTHREAD_H
#include <QtDebug>
#include <QThread>
class CThread : public QThread
{
Q_OBJECT
public:
CThread()
{}
void setTime(int t)
{ time = t;}
protected:
void run(void)
{
sleep(time);
qDebug() << "Close thread.\n";
}
private:
int time;
};
#endif // CTHREAD_H
#include "CThread.h"
#include <stdlib.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
CThread threads[5];
for(int i(0); i<5; i++) threads.setTime(i*rand()%10);
qDebug() << "Start threads.\n";
for(int i=0; i<5; i++) threads.start();
for(int i=0; i<5; i++) threads.wait();
qDebug() << "Threads finished.\n";
system("pause");
return a.exec();
}
Спасибо за хелп!
Можно наверное ) В Qt кстати есть свои высокоуровневые средства распаралеливания (QtConcurrent).
если честно не очень люблю OpenMP за громоздкость кода, обилие директив и переменных окружения тяжеловато для восприятия и чтения.
слышал об этом мельком, думаю следует почитать об этом повнимательней. вещь интересная.