找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3616|回复: 3

怎样安全的退出Task中创建的各个线程?

[复制链接]
发表于 2008-1-7 20:53:58 | 显示全部楼层 |阅读模式
Task中的线程都在getq处阻塞了,我怎样安全的退出他们?之前好像在什么地方看到过有,说是发一个什么消息,但有找不到了,所以再问一下。哪位知道的帮忙顶一下。
 楼主| 发表于 2008-1-7 20:54:13 | 显示全部楼层
看看是不是这个

virtual int ACE_Message_Queue<>::deactivate  ( void    )  [virtual]

Deactivate the queue and wakeup all threads waiting on the queue so they can continue. No messages are removed from the queue, however. Any other operations called until the queue is activated again will immediately return -1 with <errno> == ESHUTDOWN. Returns WAS_INACTIVE if queue was inactive before the call and WAS_ACTIVE if queue was active before the call.
 楼主| 发表于 2008-1-7 20:54:36 | 显示全部楼层
可以通过ACE_Message_Block::MB_STOP
  
  1. ACE_Message_Block* lastMsg = new ACE_Message_Block(0, ACE_Message_Block::MB_STOP)
  2.   otherTask->putq(lastMsg);
  3.   otherTask在接收到的时候如下处理
  4.    int OtherTask::svc()
  5.    {
  6.           ACE_Message_Block* mb;
  7.            while(1)
  8.            {
  9.              getq(mb);
  10.             if(mb->get_tpye() == ACE_Message_Block::MB_STOP)
  11.            {
  12.               mb->release();
  13.               break; //退出这个永久限环)
  14.            }
  15.            else
  16.            {
  17.               handle_message(mb); //处理这条消息
  18.            }
  19.    return 0;
  20.          
  21.     }
复制代码
发表于 2009-8-6 22:08:29 | 显示全部楼层
用test_cancel函数
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-11-23 00:15 , Processed in 0.015879 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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