|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.07.2019, 18:48 | #1 |
Регистрация: 02.01.2013
Сообщений: 4
|
Как инкапсулировать механизм "команда/квитанция"?
Уважаемые мидлы и сеньоры, подскажите, пожалуйста, как лучше обыграть следующую ситуацию:
Веду диалог по протоколу BINR с навигационной аппаратурой. Диалог в виде "команда/запрос - квитанция". Есть еще один нюанс - диалог через udp, т.к. между мной и аппаратурой есть посредник. Но это отражается лишь на механизме приема/отправки данных. Хочу инкапсулировать весь этот механизм в класс - менеджер аппаратуры так, что бы снаружи остался лишь метод, например: Код:
Код:
Конечно через usleep делать - тухлый номер, но я для наглядности. Т.е. как то надо дождаться квитанции. Я не понимаю, как в одном месте сформировать кодограмму запроса, отправить, дождаться кодограмму квитанцию в месте приёма, а в ПЕРВОМ месте сравнить два состояния и сказать получилось или нет. Последний раз редактировалось Юрич; 10.07.2019 в 19:13. |
10.07.2019, 21:12 | #2 | |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Цитата:
Код:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
|
11.07.2019, 06:12 | #3 |
Регистрация: 02.01.2013
Сообщений: 4
|
нет, так не прокатит, т.к. придти могут совсем другие данные. Например я запрашиваю настройки, стану ждать, а мне придут переодически выдаваемые данные о позиции. я побегу читать пришедшие настройки, а их нет. т.е. надо в одном месте ждать, а во втором принять, опознать именно ожидаемую квитанцию и заорать "ЗАБИРАЙ!!" (с) Няньки.
|
11.07.2019, 10:38 | #4 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Отключите все перидические передачи и работайте только по запросу.
Тогда ваш запрос никто перебить не сможет. В противном случае. Делаете чтение из основного потока путём ожидания события (QMutex myEvent). Wait -функцию пишите свою с применением yieldCurrentThread. В побочном потоке по сигналу вычитываете ваши данные и исходя из id парсети данные. Если пришли нудные то сбрасываете флаг события myEvent. В таймере побочного потока проверяете тайм аут и опять же сбрасываете флаг myEvent. И плюс ко всему прочему баги QT, которые придётся обходить.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
11.07.2019, 11:18 | #5 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Использования всякого рода wait и иже с ними следует избегать как огня.
На то существуют сигналы и слоты, худой конец таймеры... |
11.07.2019, 12:57 | #6 | |
Регистрация: 02.01.2013
Сообщений: 4
|
Цитата:
|
|
11.07.2019, 14:45 | #7 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Юрич,
Абсолютно согласен с waleri что wait в вашей задаче совсем лишний. Так что зачем вам вообще ожидание квитанции? Из патернов инверсия управления(IoC) and Dependency injection (DI) Настроили периодический пулинг. Т.е отправляете нужные запросы без всякого ожидания. По приходу датаграмы проверяете id и генерируете соответствующии им сигналы.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Убрать папки "Pictures", "Music", "Видео", "Downloads" из "МОЙ КОМПЬЮТЕР" | Бахтиёр1916 | Windows | 1 | 05.04.2017 12:53 |
Нужно пояснить/прокомментировать код программы, или коды функций "Добавить" "Удалить" "Обновить(редактировать" "Поиск" "Период") | ZIRASS | PHP | 4 | 15.06.2016 14:23 |
Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления" | link90 | Общие вопросы C/C++ | 2 | 27.03.2016 12:34 |
Механизм хранения "ключ-значение" | Алексеева Евгения | Помощь студентам | 4 | 08.05.2015 23:58 |