Сделать приложение пассивным, что вызвано событиями?

0

Я Borland C++ некоторые коды о RS232 с Borland C++. Реализация данных чтения из порта проверяет статус порта по таймеру. Некоторые события проверяют, изменился ли статус порта. Если статус изменился, события запускают подпрограмму чтения данных.

Однако, я думаю, что опрос настолько плох, что много ресурсов тратится на действие. Может ли программа быть пассивной в мониторинге порта без какого-либо агрессивного опроса или чего-то еще? Другими словами,

программа переходит в спящий режим, если некоторые события, вызванные входящими данными в порт, не активируют его.

Возможно ли это?

Спасибо за чтение

С наилучшими пожеланиями

Теги:
timer
events

2 ответа

0

Если вы работаете с функциями Win32 API для чтения последовательного порта, вы можете вызвать ReadFile. Он будет приостановлен до тех пор, пока не будет указано количество запрошенных байтов или до тайм-аута, который вы можете установить. Если ваша программа является графическим интерфейсом, то серийное чтение должно быть во вторичном потоке, поэтому поток GUI может реагировать на любые принятые сообщения Windows.

0

Я считаю, что для ваших требований подходит шаблон проектирования Reactor. Реактор основан на системном вызове "select" (который доступен как в средах Unix, так и в Windows). Из ссылочного документа,

Blocks awaiting events to occur on a set of Handles. It returns when it is possible to
initiate an operation on a Handle without blocking. A common demultiplexer for I/O 
events is select [1], which is an event demultiplexing system call provided by the UNIX
and Win32 OS platforms. The select call indicates which Handles can have operations 
invoked on them synchronously without blocking the application process.

Вы можете видеть, что этот шаблон закодирован как библиотека в нескольких рамках, таких как ACE, Boost.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню