Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Аппаратное обеспечение -> Агуров П.В. -> "Интерфейсы USB. Практика использования и программирования" -> 146

Интерфейсы USB. Практика использования и программирования - Агуров П.В.

Агуров П.В. Интерфейсы USB. Практика использования и программирования — БВХ-Петербург, 2004. — 576 c.
ISBN 5-94157-202-6
Скачать (прямая ссылка): interfeysusbpraktikaispolzovaniya2004.djvu
Предыдущая << 1 .. 140 141 142 143 144 145 < 146 > 147 148 149 150 151 152 .. 168 >> Следующая

процедура, выполняемая по завершении записи
LP_OVERLAPPED_COMPLETION_ROUTINE lpComletionRoutine
);
Формат заголовка WriteFileEx на языке Delphi имеет следующий вид:
function WriteFileEx(
hFile : THandle; // дескриптор объекта
lpBuffer : Pointer; II буфер для данных
nNumberOfBytesToWrite; DWORD; // число байт для записи
const lpOverlapped ; TOverlapped; // параметры асинх. записи
lpCompletionRoutine: FARPROC ): BOOL;
Глава 16. Базовые функции Windows
481
Все параметры этой функции совпадают с параметрами функций writeFiie
И ReadFiieEx.
16.5.1. Возвращаемое значение
При успешном завершении функция writeFiieEx возвращает ненулевое
значение, а при ошибочном - ноль. Код ошибки можно получить с помощью
вызова GetLastError.
16.5.2. Пример вызова
Листинг 16.6 показывает пример использования WriteFiieEx. Обратите
внимание на спецификатор stdcall функции обратного вызова
OnCompletionWrite.
^ЛИСТИНГ 16.6. ЛриМОр ИСЛОЛЬЗОВЯНИЯ фуНКЦИИ Wri-t.Fll.Ex "
Function TComPort.WriteByte(const В : Byte) : Boolean;
Var WriteOL ; TOverLapped; (структура для асинхронной записи} (callback-
процедура, вызываемая после завершения передачи}
Procedure OnCompletionWrite( dwErrorCode, dwNumberofBytesTransfered ;
Cardinal; var lpOverlapped : TOverlapped ); stdcall; begin
MessageBeep(0); end;
Begin Result:= False;
(создание события для асинхронной записи}
FillChar(WriteOL, SizeOf(WriteOL), 0);
WriteOL.hEvent:= CreateEvent(nil, True, True, nil); (асинхронная отправка
байта}
WriteFiieEx(FHandle, 0B, 1, WriteOL, (c)OnCompletionWrite);
SleepEx(INFINITE, True);
(освобождение дескриптора события}
CioseHandle(WriteOL.hEvent);
End;
482
Часть V. Справочник
16.6. Функция WaitForSingleObject ожидание сигнального состояния объекта
Функция WaitForSingleObject ожидает сигнального состояния объекта
синхронизации. Функция завершается в двух случаях:
? объект перешел в сигнальное состояние;
? по завершении тайм-аута ожидания.
Формат заголовка на языке С имеет вид:
DWORD WaitForSingleObject;
HANDLE hHandle, // дескриптор объекта
DWORD dwMilliseconds // пауза ожидания сигнального состояния
);
Формат заголовка на языке Delphi имеет вид:
function WaitForSingleObject;
hHandle : THandle; // дескриптор объекта
dwMilliseconds: DWORD // пауза ожидания сигнального состояния ): DWORD;
Первый параметр передает дескриптор объекта. Пауза ожидания
dwMilliseconds задается в миллисекундах. Специальная константа infinite
задает неограниченное время ожидания.
При необходимости ожидания сигнального состояния одного из нескольких
объектов или всех одновременно следует воспользоваться функцией
WaitForMultipleObjects, а Не объединять WaitForSingleObject С ПОМОЩЬЮ OR
ИЛИ AND.
16.6.1. Возвращаемое значение
При успешном выполнении функция WaitForSingleObject возвращает значение,
указывающее на состояние объекта. При ошибке возвращает wait_failed. В
табл. 16.1 приводятся возможные результаты функции.
Таблица 16.1. Результаты функции WaitForSingleObject
Код Описание ^
WAIT_ABANDONED Используется для мьютексов. Возвращается в том случае,
когда объект не был освобожден, хотя поток, его создавший, уже завершен.
В нашей книге мы не используем мьютексы
WAIT_OBJECT_0 Объект перешел в сигнальное состояние
Глава 16. Базовые функции Windows
483
Таблица 16.1 (окончание)
Код Описание
WAITJTIMEOUT Тайм-аут завершен, а сигнальное состояние не достигнуто.
Естественно, в случае infinite такой результат невозможен
WAIT_FAILED Ошибка вызова WaitForSmgleObj ect
16.7. Функция WaitForMultipleObjects: ожидание сигнального состояния
объектов
При необходимости ожидания сигнального состояния одного из нескольких
объектов одновременно следует воспользоваться функцией
WaitForMultipleObjects, а не объединять WaitForSmgleObiect С ПОМОЩЬЮ
оператора or. Эта функция ожидает сигнального состояния одного или всех
вместе объектов синхронизации. Функция завершается в двух случаях:
? один или все объекты перешли в сигнальное состояние;
? по завершении тайм-аута ожидания.
Формат заголовка на языке С имеет вид:
DWORD WaitForMultipleObjects(
DWORD nCount, // число ожидаемых объектов
const HANDLE * lpHandles, // массив дескрипторов объектов
BOOL bWaitAll // флаг "ожидать все объекты"
DWORD dwMilliseconds // пауза ожидания сигнального состояния
) ;
Формат заголовка на языке Delphi имеет вид:
function WaitForMultipleObjects(
nCount : DWORD; // число ожидаемых объектов
lpHandles : PWOHandleArray; // массив дескрипторов объектов
bWaitAll : BOOL; // флаг "ожидать все объекты"
dwMilliseconds: DWORD // пауза ожидания сигнального состояния
): DWORD;
Первый параметр передает число объектов синхронизации, дескрипторы
которых передаются во втором параметре. Если третий параметр true,
функция будет ожидать сигнального состояния всех объектов, иначе - хотя
бы одного из них. Четвертый параметр задает паузу ожидания так же, как в
функции WaitForSingleObject. Пауза ожидания задается в миллисекундах.
Специальная константа infinite задает неограниченное время ожидания.
Предыдущая << 1 .. 140 141 142 143 144 145 < 146 > 147 148 149 150 151 152 .. 168 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.