贝贝花花包包店,精品555皮具,钱夹,皮夹

字体:  

求助bcb下Ace开发问题

hitrocky 发表于: 2008-6-03 11:23 来源: ACE 开发者

我在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;
}

最新回复

yleesun at 2008-6-03 11:40:50
关闭窗口时,应该结束启动的线程,wait是等待所有线程都推出后才会退出。
hitrocky at 2008-6-03 14:49:29
我也不知道什么原因,只要有客户端连接,它就会一直在wait,能不能强行终止线程?
winston at 2008-6-03 16:26:23
你让那个Task停止响应即可。办法很多的。比如发送停止的Message_Block,或直接调用停止的命令。

svc()里面,

if(getq (msg_blk) == -1)
{
    //错误,退出,否则将阻塞
  break;
}
外面程序:
//停止队列
this->msg_queue()->deactivate();
this->flush();
this->wait();