Рефераты | Рефераты по информатике, программированию | Ещё раз о прямом доступе к аппаратуре
Ещё раз о прямом доступе к аппаратуре
Категория реферата: Рефераты по информатике, программированию
Теги реферата: отчет о прохождении практики, ценные бумаги реферат
Добавил(а) на сайт: Apraksin.
Впрочем, этот пример элегантным уже не назовешь, т.к.
использование COM-порта дает возможность избавиться от периодического опроса, используя асинхронную работу через WaitCommEvent и WaitForMultipleObjects.
Ниже приведен код примера. Для пояснения сути
происходящего код обильно прокомментирован. Но все-таки обращу внимание на
некоторые нюансы:
WaitForMultipleObjects ждет бесконечно. Никаких
периодических опросов — значит и никакого потребления ресурсов. Всё реализовано
на событиях.
Нет необходимости в TerminateThread для
принудительного прекращения выполнения потока. Выполнение может быть
«культурно» завершено в любой момент. Для этого используется отдельное событие.
Простая реализация неблокирующей задержки для
подавления дребезга. Поскольку периодический опрос мы не применяем, то, чтобы
избавиться от ложных срабатываний программным путем, нужно подождать несколько
десятков миллисекунд, и если состояние за это время не изменилось, то
замыкание/размыкание цепи состоялось. В качестве таймера используется
WaitableTimer. Обратите внимание на его теоретическую точность.
Ключевой метод
procedure
TComWatchdogThread.Execute;
var
// структура, используемая Win32 для
хранения внутренней информации при
// асинхронной работе. Ничего кроме поля
hEvent нам от неё не требуется
eOverlapped: TOverlapped;
// запрос ожидания асинхронного события
изменения состояния порта