WaitCommEvent
作用:
为一个特指的通信设备等待一个事件发生,该函数所监控的事件是与该设备句柄相关联的一系列事件。
原型:
BOOL WINAPI WaitCommEvent(
__in
__out
__in
);
参数:
hFile:指向通信设备的一个句柄,该句柄应该是由 CreateFile函数返回的。
lpEvtMask:一个指向DWORD的指针。如果发生错误,pEvtMask指向0,否则指向以下的某一事件
Value
EV_BREAK
0x0040
EV_CTS
0x0008
EV_DSR
0x0010
EV_ERR
0x0080
EV_RING
0x0100
EV_RLSD
0x0020
EV_RXCHAR
0x0001
EV_RXFLAG
0x0002
EV_TXEMPTY
0x0004
lpOverlapped:指向OVERLAPPED结构体的一个指针。如果hFile是用异步方式打开的(在CreateFile()函数中,第三个参数设置为FILE_FLAG_OVERLAPPED),lpOverlapped不能指向一个空OVERLAPPED结构体,而是与Readfile()和WreteFile()中的OVERLAPPED参数为同一个参数。如果hFile是用异步方式打开的,而lpOverlapped指向一个空的OVERLAPPED结构体,那么函数会错误地报告,等待的操作已经完成(而此时等待的操作可能还没有完成)。
如果hFile是用异步方式打开的,而lpOverlapped指向一个非空的OVERLAPPED结构体,那么函数WaitCommEvent被默认为异步操作,马上返回。这时,OVERLAPPED结构体必须包含一个由CreateEvent()函数返回的手动重置事件对象的句柄hEven。
如果hFile是用同步方式打开的,那么函数WaitCommEvent不会返回,直到要等待的事件发生。
返回值:
如果函数成功,返回非零值,否则返回0。要得到错误信息,可以调用GetLastError函数。
备注:
WaitCommEvent函数为指定的通信资源监听一系列的Event,这些Event可以由 SetcommMask和GetcommMask函数来设置和查询。
如果异步操作不能马上完成,那么该函数会返回一个FALSE,同时GetLastError函数可以截获错误码ERROR_IO_PENDING(#defineERROR_IO_PENDING997),表示操作转到后台运行。在WaitCommEvent函数返回之前,系统将OVERLAPPED结构中的hEven句柄设置为无信号状态;当WaitCommEvent函数所等待的任何一个Event发生后,系统将OVERLAPPED结构中的hEven句柄设置为有信号状态,同时将所发生事件赋给lpEvtMask。
父进程可以根据lpEvtMask来做出相应的事件处理,然后也可以调用GetOverlappedResult函数来判断WaitCommEvent的操作是否成功。
如果WaitCommEvent函数在后台运行的时候,进程企图想通过SetcommMask函数来改变当前设备的Event,那么WaitCommEvent函数马上返回,lpEvtMask指向0。