找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 2873|回复: 3

求助bcb下Ace开发问题

[复制链接]
发表于 2008-6-3 11:23:50 | 显示全部楼层 |阅读模式
我在c++ builder下进行ace开发,采用ACE_Task<ACE_MT_SYNCH>多线程方式,在客户端没有断开连接的情况下,我关闭窗体,ACE_Task的wait()方法一直处于等待,导致窗体不能关闭,请问如何解决?请高手们知道。
int MyTask::stop (void)
{
  ACE_DEBUG ((LM_DEBUG,ACE_TEXT (" (%t) MyTask::stop\n")));

  ACE_Log_Msg::instance()->clr_flags (ACE_Log_Msg::MSG_CALLBACK);
  
  if (this->my_reactor_ != 0)
    {
      ACE_DEBUG ((LM_DEBUG,
                  ACE_TEXT ("End TP_Reactor event loop\n")));
      ACE_Reactor::end_event_loop ();
   
    }
  if (this->wait () == -1)    //就是这个地方一直在等待
    ACE_ERROR ((LM_ERROR,
                ACE_TEXT ("%p.\n"),
                ACE_TEXT ("unable to stop thread pool")));
  if (this->delete_reactor () == -1)
    ACE_ERROR ((LM_ERROR,
                ACE_TEXT ("%p.\n"),
                ACE_TEXT ("unable to delete reactor")));
  return 0;
}
发表于 2008-6-3 11:40:50 | 显示全部楼层
关闭窗口时,应该结束启动的线程,wait是等待所有线程都推出后才会退出。
 楼主| 发表于 2008-6-3 14:49:29 | 显示全部楼层
我也不知道什么原因,只要有客户端连接,它就会一直在wait,能不能强行终止线程?
发表于 2008-6-3 16:26:23 | 显示全部楼层
你让那个Task停止响应即可。办法很多的。比如发送停止的Message_Block,或直接调用停止的命令。

svc()里面,

if(getq (msg_blk) == -1)
{
    //错误,退出,否则将阻塞
  break;
}
外面程序:
//停止队列
this->msg_queue()->deactivate();
this->flush();
this->wait();
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-23 18:57 , Processed in 0.016346 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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