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