用一个工作线程来发送询问命令,等待接收到下位机应答数据后退出。如果两秒下位机未应答,则重发询问命令。重发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);//置进程同步变量 

非常感谢各位大侠的帮助

原文地址:https://www.cnblogs.com/carl2380/p/2035994.html