![]() |
|
|
![]()
|
|
| alexeev |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 14.11.2012 Репутация: нет Всего: нет |
Здравствуйте, возникла слдеующая проблема...
Моя программа, прошивает плату по com порту, отправляя определенные пакеты, и если в момент прошивки, зажать главное окно или начать его передвигать по рабочему столу, прошивка останавливается, и отменяется платой т.к за определнное время не поступил нужный пакет. В связи с этим возник вопрос как это лучше реализовать? Есть варинат сделать два потока - один будет отвечать за gui (главный виджет который выводит информацию от других классов), и второй, который занимается сборкой и отсылкой пакета. Есть ли ещё какие-нибудь варианты? Много почитал, про потоки, но полной ясности так и нет) Есть не плохой пример в examples (Mandelbrot), там нечто похожее реализовано, но что-то всё равно не совсем ясно. Может подскажите что-то ещё, возможно на более простом примере. Для лучшего понимания решил попробывать написать простую программу, котрая считывает каждую секунду число из файла, и отправляет в главный класс, который выводит все на форму в техтэдит. При зажимании мышкой окна, зависание происходит не сильное, но думаю если организовать все через потоки, его вообще не будет. Не могли бы Вы пояснить, на таком простом примере, как это лучше организовать. Заранее спасибо=) |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
Однозначно нужен доп.поток.
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| kuzulis |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 5.9.2007 Репутация: нет Всего: 1 |
QtSerialPort без всяких потоков, см. пример /terminal (хотя нужно проверить). Или, если не будет получаться - то пример /blockingmaster, он "потоковый". Это сообщение отредактировал(а) kuzulis - 27.11.2012, 18:31 |
|||
|
||||
| alexeev |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 14.11.2012 Репутация: нет Всего: нет |
Не очень понял, что Вы имели в виду, я испольую сериал порт, и с ним проблем не возникает, если не трогать главное окошко, интерфейс гуи зависать не будет, и все работает без проблем. borisbn, спасибо, щас буду разбираться=) |
|||
|
||||
| kuzulis |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 5.9.2007 Репутация: нет Всего: 1 |
А я тут не очень понял. Что вы используете: Самописный класс или прямые вызовы WinAPI (потому что проблема с окошком и остановкой обработки событий имеется только в Win - это ее проблема), QtSerialPort или другие библиотеки? Я вам дал ссылку на использование примера /blockingmaster из QtSerialPort, в котором используются треды, там проблемы с остановкой евентов не должно быть. |
|||
|
||||
| alexeev |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 14.11.2012 Репутация: нет Всего: нет |
Я использую QSerialPort. А пример я не могу такой найти=(
Возвращаясь к потокам, подскажите пожалуйста, что я делаю неправильно? Есть класс Xmodem, который отправляет данные для вывода в класс потока (символ пришедший с COM):
В классе потока я его принимаю (Connect прописан в главном классе окна, код привед ниже) и отправляю в gui
Класс главного окна:
Но при зажатии окна, данные останавливаются и не дописываются своевременно по мере прихода в техтэдит Это сообщение отредактировал(а) alexeev - 28.11.2012, 14:55 |
||||||
|
|||||||
| kuzulis |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 5.9.2007 Репутация: нет Всего: 1 |
Внимательнее прочти то, что я написал и сходи, наконец, по той ссылке что я привел, наверное я не зря писал QtSerialPort а не QSerialPort? |
|||
|
||||
| alexeev |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 14.11.2012 Репутация: нет Всего: нет |
Я пользуюсь, этим же классом, при наобре сообщение t случайно пропустил.
Тут дело совсем не в классе сериал порта. |
|||
|
||||
| kuzulis |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 5.9.2007 Репутация: нет Всего: 1 |
Но он там есть (с) |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
а вот с этим, пожалуй, ничего не поделаешь. Тут поток не поможет. Из доп.потока нельзя напрямую обращаться к элементам GUI. Только через сигнал/слот. Такое обращение не рисует в техтэдите, а ставит сообщение о том, что нужно что-то дорисовать, в очередь. В эту же очередь складываются сообщения от мыши, клавиатуры и пр. а это зачем ? почему не приконнектить сигнал от XModem к слоту this ? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |