Здраствуйте, помогите разобраться.
Есть главная программа, из нее вызываеться внешняя функция, которая запускает дочерний поток.
Как код или вызов внешней функции сделать критическим.?
QMutexLocker locker( &mutexReadBd); - выдает что мутех заблокирован этим же потоком, но продолжает выполняться дальше.
Функцию readBd() я вызывыю из главной программы, по кнопке.
Я хочу что бы при следующем вызове функции, программы закончила текущий запрос, а потом начала следующий. Как-бы в стек их сложила.
// QMutex * mutexReadBd; // внешняя, new в init()
bool readBd(){
//QMutexLocker locker( &mutexReadBd);
QWaitCondition waitCondition;
waitCondition.wait(mutexReadBd,10000);
TEventStartThread * pe = new TEventStartThread(); // ..запуск дочернего потока в котором блокирутся и освобождаеться mutexReadBd
QApplication::postEvent(qApp->mainWidget(),pe);
if(ProgressIsActive == spStop)
return true;
void frmMain::customEvent( QCustomEvent *pe )
{
switch((int)pe->type()){
case TEventStartThread::TypeEvent:{
beginThread(qry,str);
break; }
}
}
void frmMain::beginThread( QSqlQuery * qry, QString str )
{
[b]mutexReadBd->lock();[/b]
ProgressIsActive = spRuning ;
if(threadBD == 0)
threadBD = new TThreadBD(this,qry,str);
else {
if(threadBD->wait() == false)
threadBD->terminate();
}
threadBD->start();
waitThread();
}
void frmMain::waitThread()
{
while(( threadBD->finished () == false )&&(i<END)) {
progressbar->setProgress(progressbar->progress ()+1);
waitCondition.wait(1);
qApp->processEvents();
}
if(threadBD->wait() == false){
threadBD->terminate();
}
ProgressIsActive = spStop ;
[b] mutexReadBd->unlock();[/b]
спасибо.