介绍 FT_W32_WaitCommEvent函数的用法、参数、返回值、注意事项、适用的操作系统环境、调用代码示例等。
支持的操作系统
Linux
Mac OS X 10.4 以上版本
Windows 2000 以上版本
Windows CE 4.2 以上版本
概述
FT_W32_WaitCommEvent函数等待指定的事件的触发。
定义
BOOL FT_W32_WaitCommEvent(FT_HANDLE ftHandle, LPDWORD lpdwEvent,LPOVERLAPPED lpOverlapped)
参数说明
ftHandle — 设备句柄。
lpdwEvent— 指针,指向的地址空间存储包含触发的事件标识的掩码。
lpOverlapped — Pointer to an overlapped structure
返回值
成功则返回非零值;如果失败则返回0。
备注
FT_W32_WaitCommEvent 函数支持重叠I/O和非重叠I/O两种方式,但在 Linux, Mac OS X 和 Windows CE 系统平台下只支持非重叠I/O。
非重叠I/O
非重叠I/O方式,参数 lpOverlapped 必须设置为 NULL。
FT_W32_ReadFile 函数通过参数 lpdwBytesReturned 返回读取到的数据长度。
FT_W32_WaitCommEvent 函数直到通过调用 FT_W32_SetCommMask 函数设置的事件之一触发后才返回;触发的事件存储在 lpdwEvent 中。
重叠 I/O
当设备以重叠I/O方式打开时,向设备发起请求等待设备响应时,可以处理其他的任务,完成额外的工作。这种方式与非重叠I/O中向设备发起请求等待设备响应后才能继续执行后续操作的方式完全不同。
参数 lpOverlapped 必须指向经过初始化的 OVERLAPPED 结构体。
FT_W32_WaitCommEvent 函数直到通过调用 FT_W32_SetCommMask 函数设置的事件之一触发后才返回;触发的事件存储在 lpdwEvent 中。
如果对应事件触发,函数立即返回,返回true,触发的事件存储在参数 lpdwEvent 中。
如果没有事件触发,则函数立即返回false,且产生一个错误。调用者可以通过 FT_W32_GetLastError 函数来查询错误原因。;如果错误码为 ERROR_IO_PENDING,说明重叠操作仍在执行,程序可以去处理别的工作;程序可以通过调用 FT_W32_GetOverlappedResult 函数来查询重叠I/O的执行结果。
代码示例
1. This example shows how to write 128 bytes to the device using non-overlapped I/O.
FT_HANDLE ftHandle; // setup by FT_W32_CreateFile for non-overlapped i/o
DWORD dwEvents;
if (FT_W32_WaitCommEvent(ftHandle, &dwEvents, NULL))
; // FT_W32_WaitCommEvents OK
else
; // FT_W32_WaitCommEvents failed
2. This example shows how to write 128 bytes to the device using overlapped I/O.
FT_HANDLE ftHandle; // setup by FT_W32_CreateFile for overlapped i/o
DWORD dwEvents;
DWORD dwRes;
OVERLAPPED osWait = { 0 };
if (!FT_W32_WaitCommEvent(ftHandle, &dwEvents, &osWait)) {
if (FT_W32_GetLastError(ftHandle == ERROR_IO_PENDING) {
// wait is delayed so do some other stuff until …
if (!FT_W32_GetOverlappedResult(ftHandle, &osWait, &dwRes, FALSE))
; // error
else
; // FT_W32_WaitCommEvent OK
// Events that occurred are stored in dwEvents
}
}
else {
// FT_W32_WaitCommEvent OK
// Events that occurred are stored in dwEvents
}
暂无评论内容