找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4391|回复: 6

ACE::fini()

[复制链接]
发表于 2010-8-13 11:56:15 | 显示全部楼层 |阅读模式
这个函数会自动关闭线程吗?我用ACE_Thread_Manager开了一个线程,在程序退出的时候没有关闭它而直接调用ACE::fini()之后线程关闭了,也没有弹出内存泄露等错误信息,请问这样用真的没有问题吗?谢谢~
发表于 2010-8-13 13:00:59 | 显示全部楼层
有问题,不能这样使用。线程一定要进行同步后,进行退出。不能用这个ACE::fini()代替。
 楼主| 发表于 2010-8-13 14:29:18 | 显示全部楼层
做了一个例子帮忙看看,跟踪进去的时候怎么线程关不掉呢?
这是创建的
  1. pthread = ACE_Thread_Manager::instance();               
  2.         if(pthread->spawn(test,this,THR_JOINABLE | THR_SCOPE_PROCESS|THR_CANCEL_ENABLE ) == -1)
  3.                 return -1;
复制代码
这是线程函数
  1. DWORD        test(void *arg)
  2. {
  3.         while(true)
  4.         {
  5.                 ::Sleep(2000);
  6.         }
  7. }
复制代码
这是关闭的
  1. if(pthread != NULL ){       
  2.                 if(!pthread->testcancel(pthread->thr_self()))                       
  3.                         pthread->cancel(pthread->thr_self());
  4.                 int n = pthread->testcancel(pthread->thr_self());               
  5.         }
复制代码
老大们帮帮忙啊,小弟实在太菜,不知道哪有问题,这边两次testcancel都是返回0,cancel返回-1
发表于 2010-8-13 16:46:52 | 显示全部楼层
回复 3# zhuzhenlei

主线程里面使用cancel是没有效果的,这个作用是主线程中取消非主线程的。
 楼主| 发表于 2010-8-13 16:52:50 | 显示全部楼层
那我在哪里取消呢?我就是想在程序关闭的时候把这个创建的线程也关掉,谢谢~
发表于 2010-8-13 17:55:00 | 显示全部楼层
主线程要发信号、设置条件给辅助线程,然后等辅助线程退出,这样同步后,再最终程序退出。
 楼主| 发表于 2010-8-16 11:07:50 | 显示全部楼层
多些两位帮忙啦,原来书上的例子写的很清楚,是我没开窍,多谢了{:3_53:}
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-11-22 08:38 , Processed in 0.075172 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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