Здравствуйте!
Есть 2 потока. Первый Занимается обработкой данных, а второй дает команду на запуск, выглядит примерно вот так:
QMutex m;
// Поток 1:
while(1) {
m.unlock();
// блокируем поток, его должен разбудить другой поток, если не разбудит, то он проснется сам по истечению 5с.
m.lock();
m.tryLock(5000);
// выполняем действия
}
// Поток 2:
void func() {
m.unlock();
}
MishaUA, нет, не правильный подход в корне
ты считаешь, что можно включить блок в одном потоке и отключить его во втором. Это не так. Каждый поток вызывает собственную пару lock-unlock, а система обеспечивает, что эти два "блока" не пересекутся во время выполнения кода обоих потоков
в твоём случае можно suspend второй поток. И в первом потоке запускать второй по некоему отсчёту времени
и вот так наизнанку никогда не делай
while(1) {
m.unlock();
m.lock();
}
//начало синхронизируемого блока
{
QMutexLocker locker(&m);
//синхронизируемый код
}
вообще, для того, что вы тут пытаетесь сделать, в плюсах есть http://en.cppreference.com/w/cpp/thread/condition_variable. плюс вероятно, что будет введён http://en.cppreference.com/w/cpp/experimental/barrier, который специально под такие случаи заточен.
не знаю, есть ли какие-то обёртки в Qt, но можно просто взять обычные плюсовые средства синхронизации.
похоже, что QWaitCondition делает что-то подобное
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)