WEB开发网
开发学院软件开发VC 多线程,多接收模式串口类 LsComm 之二 阅读

多线程,多接收模式串口类 LsComm 之二

 2006-07-21 11:15:53 来源:WEB开发网   
核心提示: 4. Sander:在win2000下能用no overlapped吗?答:查看了一下 MSDN 中 CreateFile 的说明,没有在 Win2K 下的使用限制,多线程,多接收模式串口类 LsComm 之二(4),应该是可以的,5. Sander:当用 ExecuteByAutoSig

4. Sander:在win2000下能用no overlapped吗?

答:查看了一下 MSDN 中 CreateFile 的说明,没有在 Win2K 下的使用限制,应该是可以的。

5. Sander:当用 ExecuteByAutoSignalRecvMode, BOOL bSuccess = ReadFile(m_hComm, lpBuf, dwCount, &dwBytesRead, &overlapped);
dwSignaledHandle=::WaitForMultipleObjects(3,WaitHandles,false,INFINITE);

this->m_pPort->GetSerialPort()->GetOverlappedResult(overlapped,this->m_InBufferCount,false)

这个两个函数

WaitForMultipleObject

GetOverlappedResult)

它会以 COMMTIMEOUTS 中设置的 timeout 来返回吗?也就是说 Overlapped 中的 Event 是在什么时候激活的?

答:这个问题我以前没有仔细考虑,真是不好意思。好像 COMMTIMEOUTS的TimeOut 仅对 ReadFile,WriteFile 起作用,具体可以看 MSDN 中 COMMTIMEOUTS 的描述 。

WaitForSingleObject(m_ReadOverlapped.hEvent,dwMilliseconds)==WAIT_OBJECT_0)

会等待 m_ReadOverlapped.hEvent 事件置信号标志的时候返回。那么读取 时间什么时候返回呢,找了下面的一段话:

When reading from a communications device, the behavior of ReadFile is governed by the current
communication time-outs as set and retrieved using the SetCommTimeouts and GetCommTimeouts
functions. Unpredictable results can occur if you fail to set the time-out values. For more
information about communication time-outs, see COMMTIMEOUTS.

可见 SetCommTimeouts 对这 ReadFile 起作用,也就是对 m_ReadOverlapped.hEvent 起作用。因此定时间接收模式在 COMMTIMEOUTS 时也会置读事件的 hEvent,所以等待 时间的限制就有可能不太准确。

上一页  1 2 3 4 5  下一页

Tags:线程 接收 模式

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接