描述:
我用的API写的串口读写,在读串口的时候用线程实时读取,
然后用虚拟串口工具设置两个串口COM1 COM2,用程序打开COM1,用串口调试工具打开COM2,2者进行串口通信,
发现在程序读数据的时候,每次都要先写一次,这是为什么????
解决方案1:
发现在程序读数据的时候,每次都要先写一次,这是为什么
---------
这句话很奇怪,执行的时候按照你的代码来的,一步步怎么会多出写的操作呢
OVERLAPPED os;
memset(&os,0,sizeof(OVERLAPPED));
os.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
//移到while外面,只建立一次os事件
while(true)
{
DWORD dwMask,dwTrans,dwError=0;
if(!WaitCommEvent(m_hComm,&dwMask,&os))
{
if(ERROR_IO_PENDING==GetLastError())
GetOverlappedResult(m_hComm,&os,&dwTrans,true);
}
WaitForSingleObject(os.hEvent,INFINITE);
if (dwMask==EV_RXCHAR)
{
::SendMessage(hwnd,WM_COMM_RXCHAR,0,0);
}
另外还有清除事件,好象是purge什么的,我忘了,这个好象在读取后加上用来清除事件的发送和读取标志位
没有代码,这个不好判断,一般是这么做的:
1.打开串口包括设置参数(可以在初始化函数打开,也可以通过按钮或消息打开串口),正常是执行一次打开串口就行了,程序退出后再关串口.
2.线程里循环读取串口.
3.响应发送消息进行数据发送.
定义一个类全局串口句柄变量,用来操作串口读写.
你说的先写一次才能读到数据,你看看读线程里有没有读完后就关闭串口的代码,也就是在发送时打开了串口,但读完后又关闭了串口
这应该是程序的问题