zhuzhenlei 发表于 2010-8-13 11:56:15

ACE::fini()

这个函数会自动关闭线程吗?我用ACE_Thread_Manager开了一个线程,在程序退出的时候没有关闭它而直接调用ACE::fini()之后线程关闭了,也没有弹出内存泄露等错误信息,请问这样用真的没有问题吗?谢谢~

winston 发表于 2010-8-13 13:00:59

有问题,不能这样使用。线程一定要进行同步后,进行退出。不能用这个ACE::fini()代替。

zhuzhenlei 发表于 2010-8-13 14:29:18

做了一个例子帮忙看看,跟踪进去的时候怎么线程关不掉呢?
这是创建的pthread = ACE_Thread_Manager::instance();               
        if(pthread->spawn(test,this,THR_JOINABLE | THR_SCOPE_PROCESS|THR_CANCEL_ENABLE ) == -1)
                return -1;这是线程函数DWORD        test(void *arg)
{
        while(true)
        {
                ::Sleep(2000);
        }
}这是关闭的if(pthread != NULL ){       
                if(!pthread->testcancel(pthread->thr_self()))                       
                        pthread->cancel(pthread->thr_self());
                int n = pthread->testcancel(pthread->thr_self());               
        }老大们帮帮忙啊,小弟实在太菜,不知道哪有问题,这边两次testcancel都是返回0,cancel返回-1

dwh0403 发表于 2010-8-13 16:46:52

回复 3# zhuzhenlei

主线程里面使用cancel是没有效果的,这个作用是主线程中取消非主线程的。

zhuzhenlei 发表于 2010-8-13 16:52:50

那我在哪里取消呢?我就是想在程序关闭的时候把这个创建的线程也关掉,谢谢~

winston 发表于 2010-8-13 17:55:00

主线程要发信号、设置条件给辅助线程,然后等辅助线程退出,这样同步后,再最终程序退出。

zhuzhenlei 发表于 2010-8-16 11:07:50

多些两位帮忙啦,原来书上的例子写的很清楚,是我没开窍,多谢了{:3_53:}
页: [1]
查看完整版本: ACE::fini()