我使用线程(WindowsAPI)和非阻塞套接字编写了客户端 - 服务器聊天。
当我的客户想要断开连接时(通过键入quit
)我想关闭客户端的线程。线程在客户端部分实现,server.c和client.c都处于非阻塞模式。
我被建议使用WaitForSingleObject()
函数并编写此代码:
if (!strcmp(&bufferData[0], "quit\n"))
{
send(socketDescriptor, bufferData, strlen(&bufferData[0]), 0);
printf("You just left the chat. Good bye\n");
//break;
running = false;
int retwait = WaitForSingleObject(hThread, 1000);
if (retwait == 0)
{
printf("WaitForSingleObject error : Error code: %d", GetLastError());
break;
}
if (shutdown(socketDescriptor, SD_BOTH) != 0)
{
printf("Shutdown SHUT_RDWR error");
}
break;
}
我比较传入缓冲区和命令行输入的内容。如果"退出" - 关闭线程并关闭。
出了问题因为WaitForSinglebject()
每次都返回0并且没有显示错误代码(它始终为0)。我使用了这个函数的不同参数(0,一些值并永远等待)。
我在这里做错了什么? 希望我的问题提供给MCVE。感谢