【发布时间】:2011-12-27 18:44:50
【问题描述】:
我正在尝试制作一个简单的客户端-服务器聊天程序。在客户端,我分拆另一个线程来读取来自服务器的任何传入数据。问题是,当有人从主线程注销时,我想优雅地终止第二个线程。我试图使用共享变量 'running' 来终止,问题是,套接字 read() 命令是一个阻塞命令,所以如果我这样做 while(running == 1),服务器必须在读取返回之前发送一些东西并且可以再次检查while条件。我正在寻找一种方法(仅使用常见的 unix 套接字)来进行非阻塞读取,基本上某种形式的 peek() 会起作用,因为我可以不断检查循环以查看是否完成。
读取线程循环在下面,现在它没有任何用于共享变量的互斥锁,但我计划稍后添加,别担心! ;)
void *serverlisten(void *vargp)
{
while(running == 1)
{
read(socket, readbuffer, sizeof(readbuffer));
printf("CLIENT RECIEVED: %s\n", readbuffer);
}
pthread_exit(NULL);
}
【问题讨论】:
标签: c multithreading sockets unix