线程 第一次创建返回11,已经在子线程·加了detach(贴一部分相关的,计算机网络实验)

while(true)
{
int ret = pthread_create(&t1,NULL,th,(void*)&listen1);
/*bind(listen1, (SOCKADDR )&myaddr, sizeof(myaddr));
listen(listen1, 5);
/

    if(ret!=0)
        {
        printf("create error:%d\n",ret);  
        exit(1);  
        } 
    pthread_cancel(t1);//等待线程退出
    }

    void* th(void *arg)

{
pthread_detach(pthread_self());
SOCKET acce ;

SOCKET listen1 = (SOCKET) arg;
SOCKADDR_IN friaddr1;

memset(&friaddr1, 0, sizeof(friaddr1));

int friaddr1Len = sizeof(friaddr1);

acce = accept(*listen1,(SOCKADDR *)&friaddr1, &friaddr1Len);

 char fmessage[100]={0};
 char textdata2[100]={0};
 recv(acce,fmessage, sizeof(fmessage), 0);
    printf("%s+3\n",fmessage);
 send(acce, textdata2, strlen(textdata2)+1, 0);
    printf("%s+4\n",textdata2);

pthread_exit(NULL);
return 0;
}

你确定pthread_cancel是等待线程退出吗? 那么pthread_join有事什么呢?既然以及进行了线程分离,为什么还要等待?