辅导:C++基础(一个ACE问题解决方法)
来源:优易学  2011-11-7 11:08:07   【优易学:中国教育考试门户网】   资料下载   IT书店
  ACE5.5
  现象:
  一个正常的TCP连接,一段时间后client向server发送数据失败——127.0.0.1的地址,连接未断开,client日志显示发送成功,而server的日志却显示未收到数据。
  内部实现:
  client发送数据时首先将数据加入ACE_Message_Queue<ACE_MT_SYNCH>中,再使用reactor()->notify(this, ACE_Event_Handler::WRITE_MASK)进行发送(该过程正常执行);在发送线程ACE_Task_Base的svc()中循环调用reactor()->handle_events()处理事件,在handle_output中调用send_n进行发送;程序没有调用reactor()->register_handler注册ACE_Event_Handler::WRITE_MASK事件。
  跟踪:
  发现没有回调handle_output()——是因为使用notify方式不能保证该函数被回调吗?
  尝试加入ACE_Event_Handler::WRITE_MASK注册。
  犯错了!线程被堵了。
  本次问题在ASR时发生,以前发生过一次“是”在TTS时,青年人网站提示现象完全一样——现在才发现其实上次的原因也是因为ASR造成的线程阻塞,难怪上次一直压TTS问题也没重现。

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训