• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
张纯睿
博客园    首页    新随笔    联系   管理    订阅  订阅

用一个工作线程来发送询问命令,等待接收到下位机应答数据后退出。如果两秒下位机未应答,则重发询问命令。重发10次下位机不应答,则认为通信故障,

http://topic.csdn.net/u/20081107/09/69dbccb7-5da3-4b50-9792-8cd2df37f2b5.html

最后用线程同步的方法解决 
//初始化同步事件 
hTimer=::CreateEvent(NULL,FALSE,FALSE,NULL); 


//线程中的相关代码 
CRecordreaderView *m_pView = (CRecordreaderView *)lParam;  
/////////////////////  
发送查询命令相关代码  
////////////////////  
while(::WaitForSingleObject(hTimer,2000)==WAIT_TIMEOUT && m_pView-> m_iReSendcnt <10) 
{ 
  ////////////////////////////////  
  发送查询命令相关代码(重发)  
  ////////////////////////////////  
  m_pView-> m_iReSendcnt++; 
} 
m_pView-> m_iReSendcnt=0; 


//接收到下位机应答数据后 
::SetEvent(hTimer);//置进程同步变量 

非常感谢各位大侠的帮助

posted @ 2011-05-03 23:29  张纯睿  阅读(211)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3