注册 登录
查看: 303|回复: 2

串口程序运行时卡在ReadFile函数上

[复制链接]
发表于 2014-12-4 08:59:23 | 显示全部楼层 |阅读模式
当我用串口调试助手打开过一遍串口之后,再运行此程序就好了,关闭串口就又从子线程返回了,我怀疑是哪个地方参数被改变了,所以程序才顺利运行了
在百度上找了快一天没找到啥有用的答案,倒是有几个跟我的情况一样的。重启电脑未运行调试助手时我的程序子线程就无法返回,但是运行串口调试助手打开过一遍串口时就好了。崩溃啊
求助山外哥还有其他的编程大神。(PS:不知道帖子发对地方了没,上次就不小心发错地方了)

  1. Mydlg2_hCom = CreateFile(com, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, NULL, NULL);    //打开一个串口设备

  2. DCB wdcb;                                                         //定义串口配置结构体变量  
  3. GetCommState(Mydlg2_hCom,&wdcb);                                  //获取最近打开过的串口配置存到wdcb(DCB结构体)中
  4. wdcb.DCBlength = sizeof(DCB);
  5. wdcb.ByteSize = 8;                                                //设置一次接收byte数据位数为8为  
  6. wdcb.BaudRate = select_baud;                                      //配置所选择的波特率
  7. wdcb.StopBits = ONESTOPBIT;
  8. wdcb.fParity  = 1;
  9. wdcb.Parity   = indexfparity;                              //(indexfparity)校验方式选择,在下拉列表中选择

  10. SetCommState(Mydlg2_hCom,&wdcb);                                  //把配置好的串口设置覆盖到原来的DCB
  11. PurgeComm(Mydlg2_hCom,PURGE_RXCLEAR|PURGE_TXCLEAR);               //清空串口的接收和发送缓冲区的数据

  12. Mydlg2_hComCreated = CreateThread(NULL,0,Mydlg2_rxthread,hwnd,0,0);//创建一个线程进行数据接收
  13. Mydlg2_ComSet.Mydlg2_Threadflag = TRUE;                            //将线程接收设为可接受状态


  14. DWORD WINAPI Mydlg2_rxthread(LPVOID lparam)              //线程接收函数
  15. {
  16.   TCHAR Mydlg2_rxstr[20];
  17.   HWND hwnd = (HWND)lparam;
  18.   PurgeComm(Mydlg2_hCom,PURGE_RXCLEAR | PURGE_TXCLEAR);
  19.   CloseHandle(Mydlg2_hComCreated);
  20.   while(Mydlg2_ComSet.Mydlg2_Threadflag)                                        //当要关闭串口时就设置(Mydlg2_ComSet.Mydlg2_Threadflag)为 0
  21.   {
  22.     if(ReadFile(Mydlg2_hCom, Mydlg2_rxstr, 2, &Mydlg2_ComSet.Mydlg2_rxcount, NULL))   //我要关闭串口时,程序总是卡在这里,线程无法返回,而且主线程也卡死了,就像是ReadFile在一直等待接收,没接受到数据就不会返回(找帮助文档也没搞出来,头大)
  23.     {  
  24.       Mydlg2_rxstr[Mydlg2_ComSet.Mydlg2_rxcount] = '\0';
  25.       MessageBox(hwnd, Mydlg2_rxstr, "", MB_OK);
  26.     }
  27.   }
  28. //  CloseHandle(Mydlg2_hCom);
  29.   return 0;
  30. }








回复

使用道具 举报

发表于 2014-12-4 10:49:32 | 显示全部楼层
这个是啥上位机的代码啊?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-4 11:01:23 | 显示全部楼层
仰逸致 发表于 2014-12-4 10:49
这个是啥上位机的代码啊?

串口示波器,问题已解决,我知道咋回事了,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部