Проблема с потоками, Разбор с функциями sleep |
Здравствуйте, гость ( Вход | Регистрация )
Проблема с потоками, Разбор с функциями sleep |
AD |
17.3.2011, 11:36
Сообщение
#1
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Возникла проблема в приложении управления прожектором заставить тикать часики в момент работы прожектора. Сделал два параллельных потока. ContinueRotation - отвечающий за работу прожектора и TimeThread - отвечающий за тикание и показ часиков на панельки. Чтобы приложение не зависало, запуск потока ConinueRotation делаю в потоке TimeThread. Вопросы следующие, если я использую функцию sleep в потоке ConinueRotation, то управление возвращается в поток TimeThread или же в главный поток? Как заставить во время передачи с помощью функции WriteFile в COM-порт данных о вращении прожектора в какую-то сторону не застывать секундомер. При этом как только вращение заканчивается он отображает корректное время.
|
|
|
AndreyR |
17.3.2011, 17:20
Сообщение
#2
|
Новичок Группа: Новичок Сообщений: 7 Регистрация: 29.1.2011 Пользователь №: 2376 Спасибо сказали: 0 раз(а) Репутация: 0 |
У меня маленький опыт, но я недавно упирался в вопрос застывания потока, мне помог метод QCoreApplication::processEvents(QEventLoop::AllEvents). Вызывается он там, где происходит то самое затыкающее действие (в ваше случае, наверное, это место, где реализован процесс передачи данных в порт). Возможно, это то, что вам нужно...
|
|
|
Iron Bug |
20.3.2011, 19:57
Сообщение
#3
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
если я использую функцию sleep в потоке ConinueRotation, то управление возвращается в поток TimeThread или же в главный поток? это в принципе неправильный вопрос. управление не "возвращается". возвращается оно при вызове процедур и т.п. а тут потоки, они просто конкурируют между собой. у кого приоритет выше - тот и работает. если потоки спят, то управление может быть передано вообще другому приложению. в таких случаях обычно делают так: графика в одном потоке, а управление девайсами и прочие потусторонние манипуляции, которые пользователь не видит - в другом. а дальше лишь вопрос разруливания приоритетов. можно, конечно, сделать так, как написано выше. но прерывать работу с девайсом ради отрисовки чего-то там на экране вряд ли имеет смысл. логичнее просто вынести работу с девайсом в отдельный поток и передавать в юзерскую часть данные о ходе выполнения задачи. |
|
|
Текстовая версия | Сейчас: 25.4.2024, 1:20 |