所以在Read 的動作要使用event driven。
ref MSDN : Using Communication Event
也就是用 WaitCommEvent() C和 SetCommEventMask( )。
// Specify a set of events to be monitored for the port.
SetCommMask (hPort, EV_RXCHAR);
while (1)
{
DWORD EvtMask;
WaitCommEvent (hPort, &EvtMask, 0);
SetCommMask (hPort, EV_RXCHAR);
while(1)
{
BYTE Byte;
DWORD BytesReaded;
ReadFile (hPort, &Byte, 1, &BytesReaded, 0);
if (BytesReaded == 1)
ProcessChar (Byte);
else
break;
}
}
其中要注意的是每次WaitCommEvent( )前要重新設一次EventMask( )。
雖然不錯,但是還是有點缺陷呀...
可以Set的Event只有RX, TX, CTS, ..RING..etc。沒有timeout。
所以沒有辦法做到..."如果10sec內都沒有char送到,就return"的動作。
真可惜,在實際通訊時,這種功能是很實用的,可以用來取代一個 housekeeping thread,常常來monitor 通訊對方是不是還活著..
沒有留言:
張貼留言