Реферат: Ещё раз о прямом доступе к аппаратуре

// заполним структуры для асинхронной работы

FillChar(eOverlapped, SizeOf(eOverlapped), 0);

eOverlapped.hEvent := FChangeEvent;

eHandles[0] := eOverlapped.hEvent;

eHandles[1] := FTerminateEvent;

eHandles[2] := FFlutterTimer;

// 0.5 секундыдля SetWaitableTimer

eTime := -5000000;

// Ничего себе точность, не правда ли?

// предварительно взведем флаг ожидания события, чтобы цикл заработал

InitWaitCommEvent;

while not Terminated do

case WaitForMultipleObjects(3, @eHandles, False, INFINITE) of

// при изменении состояния порта

WAIT_OBJECT_0:

begin

// опять взведем флаг ожидания события

InitWaitCommEvent;

// для подавления дребезга сделаем небольшую задержку. Если состояние

// порта изменится быстрее, чем истечет время задержки (дребезг), то

// таймер просто будет переведен "на попозже".

Win32Check(SetWaitableTimer(FFlutterTimer, eTime, 0, nil, nil,

False));

end;

// при запросе принудительного завершении потока

WAIT_OBJECT_0 + 1:

// незамедлительный выход - завершение выполнения потока

Exit;

// после задержки для подавления дребезга

К-во Просмотров: 194
Бесплатно скачать Реферат: Ещё раз о прямом доступе к аппаратуре