![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
semibug |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 27.3.2009 Репутация: нет Всего: нет |
Пишу класс, работающий с железкой, набор команд для управления железкой небольшой, и построен по принципу - команда/ответ.
Ответ приходит не сразу, мультипоточность по ТЗ запрещена. Соответственно применяю подход с помощью опросов состояния. Например дергаю метод someCmdBegin() с нужными аргументами, затем регулярно проверяю завершение с помощью completed(), и по завершению получаю результаты методом someCmdEnd(). Т.е. для каждой команды есть пара begin(передаем аргументы)/end(получаем результаты). Сей подход кажется громоздким, а задача велосепедной. Подскажите пожалуйста в какую сторону смотреть для улучшения дизайна? |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
так ответ у Вас же уже есть :
методы должны быть для работы с командой, а сама команда представлять пакет данных.. для более точного ответа данных условия недостаточно.. |
|||
|
||||
mabrarov |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 12.1.2011 Где: Казань Репутация: 8 Всего: 9 |
Посмотрите на Windows IOCP и Boost.Asio.
|
|||
|
||||
semibug |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 27.3.2009 Репутация: нет Всего: нет |
Собственно вопрос больше по интерфейсу. Насколько он логичный и интуитивно понятный пользователю класса.
Абстрагируясь от этой конкретной задачи, каким может быть интерфейс для класса, выполняющего набор действий, занимающих некоторое время, с условием, что запускать отдельный поток не допускается. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
response_one query_one(connection& int, int);
a должен ли быть класс ? класс может быть нужен для описания соединения.. также классом может быть обработчик команд.. команды же должны быть свободные для расширения.. Это сообщение отредактировал(а) mes - 12.8.2012, 11:21 |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Я бы избавил пользователя от периодического дёрганья completed(). Как-нибудь так (псевдо-код)
Добавлено @ 13:23 хммм. странное требование Добавлено через 5 минут и 7 секунд Если команды могут вызываться пока предыдущая не закончилась, то нужно сделать список таймеров, а не Timer * m_timer; Это сообщение отредактировал(а) borisbn - 12.8.2012, 13:24 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |