Название: потоки, критические секции, QMutex Отправлено: myr от Май 06, 2010, 10:04 Здраствуйте, помогите разобраться.
Есть главная программа, из нее вызываеться внешняя функция, которая запускает дочерний поток. Как код или вызов внешней функции сделать критическим.? QMutexLocker locker( &mutexReadBd); - выдает что мутех заблокирован этим же потоком, но продолжает выполняться дальше. Функцию readBd() я вызывыю из главной программы, по кнопке. Я хочу что бы при следующем вызове функции, программы закончила текущий запрос, а потом начала следующий. Как-бы в стек их сложила. Код: // QMutex * mutexReadBd; // внешняя, new в init() Код: void frmMain::customEvent( QCustomEvent *pe ) Код: void frmMain::beginThread( QSqlQuery * qry, QString str ) Название: Re: потоки, критические секции, QMutex Отправлено: Marat(Qt) от Май 06, 2010, 22:34 Зачем Mutex блокировать в основном потоке?
Его надо блокировать в threadBD. Тогда поток, начав выполняться, попытаеться заблокировать Mutex, если он свободен, происходит блокировка и поток продолжает выполняться. Если же предыдущий threadBD еще не разблокировал mutex, то новый поток (запущенный вторым нажатием на кнопку) не сможет заблокировать mutex и будет ждать его освобождения. Можно блокировать mutex в одном потоке несколько раз, но сколько раз ты его блокируешь, столько раз ты должен его разблокировать. В примере ты блокируешь его только в главном потоке, который всегда один, сколько не блокируй его в одном потоке - никого он держать не будет Название: Re: потоки, критические секции, QMutex Отправлено: myr от Май 07, 2010, 09:09 Спасибо большое.
|