请教个,退出线程问题
在执行: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。任何其他返回值都表示错误。
退出一个线程。如何响应退出请求取决于目标线程的状态。