hitrocky 发表于 2008-6-3 11:23:50

求助bcb下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 发表于 2008-6-3 11:40:50

关闭窗口时,应该结束启动的线程,wait是等待所有线程都推出后才会退出。

hitrocky 发表于 2008-6-3 14:49:29

我也不知道什么原因,只要有客户端连接,它就会一直在wait,能不能强行终止线程?

winston 发表于 2008-6-3 16:26:23

你让那个Task停止响应即可。办法很多的。比如发送停止的Message_Block,或直接调用停止的命令。

svc()里面,

if(getq (msg_blk) == -1)
{
    //错误,退出,否则将阻塞
break;
}
外面程序:
//停止队列
this->msg_queue()->deactivate();
this->flush();
this->wait();
页: [1]
查看完整版本: 求助bcb下Ace开发问题