首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问个,退出线程有关问题

2012-03-25 
请教个,退出线程问题在执行:pthread_cancel时,该线程变成defunct状态,我希望此线程小时掉,这样才合理代码

请教个,退出线程问题
在执行:pthread_cancel时,该线程变成defunct状态,我希望此线程小时掉,这样才合理

代码如下:
void   *   Socket_childthread(void   *arg)
{
        //CALLFUN   Update   =   (CALLFUN)fun;
        /*int   *   aaa=(int   *)arg;
        int   bbb;
        bbb=*aaa;
        int   bbb   =   *((int   *)arg);
        free(arg);*/
       
        int   recvbytes;
        char   buf[200];
        signal(SIGPIPE,SIG_IGN);//忽略信号
        //*/
        USER   *user=(USER   *)arg;      
        userarray.push_back(user);
        //*/
        Cchildsocket   *childsocket=new   Cchildsocket();
        childsocket-> client_fd=user-> client_fd;
        strcpy(childsocket-> ip,user-> ip);
        childsocket-> connecttime=user-> connecttime;
        //*/
        while(true)
        {
            //*/接收没问题  
            if((recvbytes=recv(childsocket-> client_fd,buf,200,0))> 0)
            {
                buf[recvbytes]= '\0 ';
                if(strncmp(buf, "2 ",1)==0)
                {
                    pthread_cancel(childsocket-> client_fd);
                    //pthread_exit(0);  
                    delete     childsocket;
                    delete     user;
                }          
            }

            usleep(50);        
        }
        //*/        
}

请大家帮我看看这几行代码,有什么不多的地方,请指点

[解决办法]
把Cchildsocket放出来
一般的CreatThread创建的线程用ExitThread结束
_beginThreadEx创建的线程用_endThreadEx结束
还有楼主所说的值为111的句柄是thread kernel object的句柄,不是线程执行体的句柄,该object中存放一些有关该线程的统计数据和函数入口等,结束进行只会减少它的引用次数,并不会删除该句柄,在~Cchildsocket()应该有CloseHandle(Handle?),我知道的大致就这些了,不知对楼主有无用处
[解决办法]
退出线程pthread_cancel
#include <pthread.h>
int pthread_cancel(pthread_t thread);
返回值:函数成功返回0。任何其他返回值都表示错误。

退出一个线程。如何响应退出请求取决于目标线程的状态。

热点排行