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

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

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

FreeMem(DataPtr);
CloseHandle(FComPortHandle);
...., (
истинг 16.4.Т1ример использования функции WriteFile (асинхронная запись)
..................i-l--!v_. А.Я.i..I
.........................................m................
var
FComHandle
AsyncPtr
BytesTrans
THandle;
PAsync;
DWORD;
FComHandle:= CreateFile(...,
FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,
0
);
{Создание асинхронных параметров)
New(AsyncPtr);
With AsyncPtr74 do begin
Kind := 0; { 0 - write, 1 - read }
GetMem(Data, Count);
Move(Buffer, DataA, Count);
Size ;= Count; end;
{Передача данных)
WriteFile(FComHandle, Buffer, Count, BytesTrans, @AsyncPtrA.Overlapped);
{Освобождение памяти)
Dispose(AsyncPtr);
CloseHandle(FComHandle);
16.4. Функция ReadFileEx: АРС-чтение данных
Функция ReadFileEx осуществляет асинхронное чтение данных. Работа этой
функции похожа на вызов обычной функции ReadFile в режиме асинхронного
чтения, но ReadFileEx позволяет программе выполнять другие дейст-
478
Часть V. Справочник
вия во время чтения данных. При завершении чтения будет вызвана
специальная callback-процедура. В Windows 95/98/МЕ эта функция не может
быть использована для чтения данных из СОМ-порта. Формат заголовка
ReadFiieEx на языке С имеет следующий вид:
BOOL ReadFiieEx(
HANDLE hFile, // дескриптор объекта
LPVOID lpBuffer, // буфер для данных
DWORD dwBufLen, // число байт для чтения
LPOVERLAPPED lpOverlapped, // параметры асинх. чтения // callback-
процедура, выполняемая по завершении чтения
LP_OVERLAPPED_COMPLETION_ROUTINE lpComletionRoutine
);
Формат заголовка ReadFiieEx на языке Delphi имеет следующий вид:
function ReadFiieEx(
hFile : THandle; // дескриптор объекта
lpBuffer : Pointer; // буфер для данных
nNumberOfBytesToRead: DWORD; // число байт для чтения
lpOverlapped : POverlapped; // параметры асинх. чтения
// callback-процедура, выполняемая по завершении чтения
lpCompletionRoutine : TPROverlappedCompletionRoutine ): BOOL;
Все параметры кроме последнего совпадают с параметрами функции ReadFile.
Последний параметр задает адрес процедуры, которая будет выполнена по
завершении чтения данных. Эта процедура должна иметь тип
TPROverlappedCompletionRoutine, описываемый следующим образом:
VOID CALLBACK FilelOCompletionRoutine(
DWORD dwErrorCode, // код ошибки
DWORD dwNumberOfBytesTransfered, // число прочитанных байт
LPOVERLAPPED' lpOverlapped // асинхронная структура
) ;
В Delphi тип этой процедуры описан как обычный указатель, без
спецификации параметров:
type
TPROverlappedCompletionRoutine = TFarProc;
На самом деле формат заголовка этой процедуры в Delphi должен быть такой,
как показан в листинге 16.5.
Глава 16. Базовые функции Windows
479
Параметры callback-процедуры имеют следующий смысл:
? dwErrorCode принимает значение 0, если операция успешна;
? dwNumberofBytesTransfered равен числу прочитанных байтов или 0, если
функция завершена с ошибкой;
? lpOverlapped передает структуру асинхронного чтения.
16.4.1. Возвращаемое значение
При успешном завершении функция ReadFiieEx возвращает ненулевое значение,
а при ошибочном - ноль, при этом код ошибки можно получить с ПОМОЩЬЮ
вызова GetLastError.
16.4.2. Дополнительные сведения
Для завершения всех асинхронных операций может использоваться функция
Cancello.
Функция ReadFiieEx игнорирует параметр hEvent В структуре lpOverlapped и
он может использоваться программой.
16.4.3. Пример вызова
Листинг 16.5 показывает пример использования ReadFiieEx. Обратите
внимание, что процедура, вызываемая при завершении операции, должна иметь
спецификатор stdcall.
|^стинг,16.5.. Пример, использования функции ReadFiieEx
Procedure TReadThread.Execute;
Var ReadOL : TOverLapped; {структура для асинхронного чтения}
{Callback-процедура, вызывающаяся при получении байта}
Procedure OnCompletionRead( dwErrorCode, dwNumberofBytesTransfered
:Cardinal; var lpOverlapped : TOverlapped ); stdcall; begin end;
Begin With FOwner do
While (not Terminated) and Connected do begin {пока порт открыт}
480
Часть V. Справочник
{Запуск операции асинхронного чтения}
ReadFileEx(FHandle, @FByte, 1, SReadOL, @OnCompletionRead);
(Ожидание завершения операции}
SleepEx(INFINITE, True);
{Сюда мы попадем, только когда байт будет принят}
Synchronize(DoReadByte);
End;
End;
16.5. Функция WriteFileEx:
АРС-передача данных
Функция WriteFileEx производит асинхронную запись данных. Работа этой
функции похожа на вызов функции WriteFile в режиме асинхронной записи, но
WriteFileEx позволяет программе выполнять другие действия во время записи
(передачи) данных. При завершении записи будет вызвана специальная
callback-процедура.
В Windows 95/98/МЕ эта функция не может быть использована для чтения
данных из СОМ-порта.
Формат заголовка WriteFileEx на языке С имеет следующий вид:
BOOL WriteFileEx (
HANDLE hFile, // дескриптор объекта
LPCVOID lpBuffer, // буфер для данных
DWORD dwBufLen, // число байтов для записи
LPOVERLAPPED lpOverlapped, // параметры асинх. записи // callback-
Предыдущая << 1 .. 139 140 141 142 143 144 < 145 > 146 147 148 149 150 151 .. 168 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

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

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

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

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