crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Проблема с потоками, Разбор с функциями 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  


Цитата(AD @ 17.3.2011, 13:36) *
если я использую функцию sleep в потоке ConinueRotation, то управление возвращается в поток TimeThread или же в главный поток?

это в принципе неправильный вопрос. управление не "возвращается". возвращается оно при вызове процедур и т.п. а тут потоки, они просто конкурируют между собой. у кого приоритет выше - тот и работает. если потоки спят, то управление может быть передано вообще другому приложению.
в таких случаях обычно делают так: графика в одном потоке, а управление девайсами и прочие потусторонние манипуляции, которые пользователь не видит - в другом. а дальше лишь вопрос разруливания приоритетов. можно, конечно, сделать так, как написано выше. но прерывать работу с девайсом ради отрисовки чего-то там на экране вряд ли имеет смысл. логичнее просто вынести работу с девайсом в отдельный поток и передавать в юзерскую часть данные о ходе выполнения задачи.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.4.2024, 1:20