如果关闭select建立的线程?
请教,如果关闭非阻塞模式下建立的select线程。测试代码如下:
void testconnect()
{
const WORD wMinVer = 0x0101;
WSADATA wsaData;
SOCKADDR_IN sa;
unsigned long non_blocking = 1;
int ret = 1;
struct timeval tv;
fd_set writefds;
// 设置连接超时时间
tv.tv_sec = 10; // 秒数
tv.tv_usec = 0; // 毫秒
WSAStartup(wMinVer, &wsaData);
sock = socket(PF_INET, SOCK_STREAM, 0);
non_blocking = ioctlsocket(sock, FIONBIO, &non_blocking);
sa.sin_family = AF_INET;
sa.sin_port = htons(6789);
sa.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
if (connect(sock, (SOCKADDR*)&sa, sizeof(sa)) == -1){
FD_ZERO(&writefds);
FD_SET(sock, &writefds);
if(select(sock+1,NULL,&writefds,NULL,&tv) != 0){
FD_ISSET(sock,&writefds);
}
}
if (ret != SOCKET_ERROR ) {
AfxMessageBox("连接成功");
}
shutdown(sock , 2);
closesocket(sock);
WSACleanup();
sock = NULL;
}
函数运行没有问题,能够连接成功。但是问题是在函数运行前,在任务管理器中该程序只有一个线程。而该函数运行完后,就变成两个线程了。我跟了一下,发现在
if (connect(sock, (SOCKADDR*)&sa, sizeof(sa)) == -1){
之后就多出了一根线程,而且这根线程在函数退出后也不会消失。
我现在要做的程序需要多次切换服务连接,需要多次重启服务。但是每次都会多一个线程出来。虽然程序可以继续运行,但是会发现程序占用内存越来越多。
当我把socket改为阻塞模式,再去connect的时候,就不会多线程出来了。我猜可能是非阻塞用select的缘故吧。希望知道怎么关闭这个多出来的线程的大大给我说一下?!