我正在尝试创建一个简单的客户端-服务器聊天程序。在客户端,我会开启另一个线程来读取任何来自服务器的传入数据。问题是,当用户从主线程注销时,我想要优雅地终止第二个线程。我尝试使用共享变量“running”来终止,但是,socket read() 命令是一条阻塞命令,因此如果我执行 while(running == 1),服务器必须发送一些内容,然后 read() 才会返回并再次检查 while 条件。我正在寻找一种方法(仅使用常见的 Unix sockets)来进行非阻塞读取,基本上某种形式的 peek() 将起到作用,这样我就可以不断检查循环以查看是否完成。
下面是读取线程循环,现在它没有任何共享变量的互斥体,但我计划稍后添加! ;)
下面是读取线程循环,现在它没有任何共享变量的互斥体,但我计划稍后添加! ;)
void *serverlisten(void *vargp)
{
while(running == 1)
{
read(socket, readbuffer, sizeof(readbuffer));
printf("CLIENT RECIEVED: %s\n", readbuffer);
}
pthread_exit(NULL);
}