arm7tdmi 发表于 2011-12-10 00:13:12

请教如何修改CSerialPort类,或使用其他办法,使发送函数能够立即发送数据。

最近用到CSerialPort类,从PC机发给单片机若干条数据,发送一条,然后等待回应,若正确则发送第二条,直至发送完毕。我在一个for循环里使用WriteToPort发送数据,结果只能发送一条,其它发送不出去,在网上查了查原因如下:
发送数据只是将数据写入发送缓冲区,然后给发送线程发送一个消息通知其开始发送,这样发送函数返回的时候数据还没有真正发出,如果连续调用发送函数则上次没发送的数据就会被覆盖了。

请问如何修改一下,使数据能立即发送出去呢?谢谢。

ntkz 发表于 2011-12-10 00:49:56

PC是基于消息机制的,概念要搞清楚。

pt001 发表于 2011-12-10 09:24:26

少量数据可用transmitchar发送立即字符。

arm7tdmi 发表于 2011-12-10 11:04:52

数据量很大,成千上万条。

pt001 发表于 2011-12-10 11:34:26

那发送时用Write(const void* lpBuf, DWORD dwCount, OVERLAPPED& overlapped, DWORD* pBytesWritten=NULL)
使用 overlapped方式,发送前把overlapped中的event复位,然后用WaitForSingleObject等待overlapped中的event被置位,就保证每次都是发送出去了,
下一次发送也不会冲掉前面的。

arm7tdmi 发表于 2011-12-10 22:34:48

感谢楼上,但是我的CSerialPort类貌似只有4个WritetoPort()函数,没有Write()函数,我在龚建伟的串口调试助手源码的基础上改的,难道龚建伟把Write()函数删了?

arm7tdmi 发表于 2011-12-11 12:05:22

这是两个CSerialPort类,作者不一样,但是名字都是CSerialPort.
+_+
页: [1]
查看完整版本: 请教如何修改CSerialPort类,或使用其他办法,使发送函数能够立即发送数据。