QMutex. Принудительная блокировка для ожидания команды |
Здравствуйте, гость ( Вход | Регистрация )
QMutex. Принудительная блокировка для ожидания команды |
MishaUA |
27.5.2018, 15:05
Сообщение
#1
|
Участник Группа: Участник Сообщений: 185 Регистрация: 28.4.2013 Пользователь №: 3810 Спасибо сказали: 13 раз(а) Репутация: 0 |
Здравствуйте!
Есть 2 потока. Первый Занимается обработкой данных, а второй дает команду на запуск, выглядит примерно вот так:
Правильный ли данный подход? Просто у меня почему-то в m.tryLock(5000) замирает и по истечению 5с не просыпается. |
|
|
Алексей1153 |
28.5.2018, 8:24
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
MishaUA, нет, не правильный подход в корне
ты считаешь, что можно включить блок в одном потоке и отключить его во втором. Это не так. Каждый поток вызывает собственную пару lock-unlock, а система обеспечивает, что эти два "блока" не пересекутся во время выполнения кода обоих потоков в твоём случае можно suspend второй поток. И в первом потоке запускать второй по некоему отсчёту времени и вот так наизнанку никогда не делай
Строго в порядке Цитата m.lock(); m.unlock(); Для этого есть специальный класс QMutexLocker. Пример:
|
|
|
Iron Bug |
28.5.2018, 19:29
Сообщение
#3
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
вообще, для того, что вы тут пытаетесь сделать, в плюсах есть condition variables. плюс вероятно, что будет введён barrier, который специально под такие случаи заточен.
не знаю, есть ли какие-то обёртки в Qt, но можно просто взять обычные плюсовые средства синхронизации. |
|
|
Алексей1153 |
29.5.2018, 7:25
Сообщение
#4
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
похоже, что QWaitCondition делает что-то подобное
|
|
|
Текстовая версия | Сейчас: 22.11.2024, 13:46 |