首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

WIN32API、串口、同步、WriteFile、阻塞,该如何解决

2012-01-19 
WIN32API、串口、同步、WriteFile、阻塞问题描述:1 利用Win32 API进行串口通信,方式为同步,关键代码如下:Dlg::

WIN32API、串口、同步、WriteFile、阻塞
问题描述:
1 利用Win32 API进行串口通信,方式为同步,关键代码如下:
  Dlg::Onitial()
{
  //HANDLE File
  hCon = CreateFile(g_ctrPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,  
  FILE_ATTRIBUTE_NORMAL,NULL); //g_ctrPort为“COM1”
  
  //设置
  GetCommState(hCon,&g_dcb);
  g_dcb.BaudRate=9600;
  ..................
  ..................
  SetCommState(hCon,&g_dcb);

  /*---------- 没有设置超时 -----------/

  //设置缓冲区
  SetupComm(hCon,128,128);
   
  //开启接收线程
  AfxBeginThread(RecvFromSeri,this->m_hWnd);
}

2 RecvFromSeri为一While(True)的循环,里面有WaitCommEvent(),因为与此贴主题没有多大关系(我感觉),就不贴了,如果有需要在贴

3 某单击事件响应函数:
  Dlg::BnClicked()
{
  ................. //获得文本编辑框中的文本(即我要发送的内容)
  WriteFile(hCon,buffer_send,256,&dw_send,NULL);//buffer_send为编辑框中的文本内容
}

问题来了:

一、 我设了断点,程序执行到3中的WriteFile 这一步界面线程就堵死了。

请教了
   
 

[解决办法]
SetupComm(hCon,128,128);
然后你写入的数据为256,而且我认为你在做写入的时候最好做一个同步保护,以免你的写入数据被你的读入数据修改
[解决办法]
// 如果是应答方式的通讯协议,采用同步方式的话,建议将读写放到一个线程中。
// 写完之后在等待读入。

热点排行