使用Linux C.我在线程函数中使用sleep,但整个过程结束了吗?

时间:2014-04-15 08:55:50

标签: multithreading posix

当程序在线程函数中进入休眠sleep (1)时,它突然结束。它与线程有关吗?

void send_packet(int sockfd, struct sockaddr_in dest_addr)
{   
int packetsize;
while( nsend < MAX_NO_PACKETS)
{      
    printf("send %d\n", nsend);
    nsend++;
    packetsize=pack(nsend); 
    if( sendto(sockfd,sendpacket,packetsize,0,(struct sockaddr *)&dest_addr,sizeof(dest_addr) )<0  )
    {       
        perror("sendto error");
        continue;
    }
    printf(" %d\n", packetsize);
    sleep(1); 
}
}

int find_host(void * arg)
{

send_packet(sockfd, present_addr);
recv_packet(sockfd, recvpacket, from);

pthread_create(&ntid, NULL, find_host, (void *)&inaddr);    

1 个答案:

答案 0 :(得分:1)

在一条评论中,您写道主线程已结束。取自pthread_create man page

新线程以下列方式之一终止:
[...]
       *进程中的任何线程都调用exit(3)或主线程          从main()执行返回。这导致所有的终止          这个过程中的线程。

您的主线程需要pthread_join等待发件人终止。