Win32串口编程
2007-03-17 22:00:53 来源:WEB开发网下面我们先简单说一下OVERLAPPED结构和GetOverlappedResult函数:
OVERLAPPED结构
OVERLAPPED结构包含了重叠I/O的一些信息,定义如下:typedef struct _OVERLAPPED { // o
在使用ReadFile和WriteFile重叠操作时,线程需要创建OVERLAPPED结构以供这两个函数使用。线程通过OVERLAPPED结构获得当前的操作状态,该结构最重要的成员是hEvent。hEvent是读写事件。当串口使用异步通讯时,函数返回时操作可能还没有完成,程序可以通过检查该事件得知是否读写完毕。
DWORD Internal;
DWORD InternalHigh;
DWORD Offset;
DWORD OffsetHigh;
HANDLE hEvent;
} OVERLAPPED;
当调用ReadFile, WriteFile 函数的时候,该成员会自动被置为无信号状态;当重叠操作完成后,该成员变量会自动被置为有信号状态。GetOverlappedResult函数
该函数返回重叠操作的结果,用来判断异步操作是否完成,它是通过判断OVERLAPPED结构中的hEvent是否被置位来实现的。
BOOL GetOverlappedResult(
HANDLE hFile, // 串口的句柄
// 指向重叠操作开始时指定的OVERLAPPED结构
LPOVERLAPPED lpOverlapped,
// 指向一个32位变量,该变量的值返回实际读写操作传输的字节数。
LPDWORD lpNumberOfBytesTransferred,
// 该参数用于指定函数是否一直等到重叠操作结束。
// 如果该参数为TRUE,函数直到操作结束才返回。
// 如果该参数为FALSE,函数直接返回,这时如果操作没有完成,
// 通过调用GetLastError()函数会返回ERROR_IO_INCOMPLETE。
BOOL bWait
);
更多精彩
赞助商链接