本帖最后由 VisualEleven 于 2014-04-23 16:47:54 编辑

解决方案 »

  1.   

    #define MAX_THREAD_COUNT (60)
    HANDLE hThread[MAX_THREAD_COUNT ] = {0};
    CWinThread* pThread[MAX_THREAD_COUNT] = {0};
    for(size_t i = 0; i != MAX_THREAD_COUNT; ++i)
    {
      pThread[i] = AfxBeginThread(ThreadPortScan, ... , CREATE_SUSPENDED, ...);
      pThread->m_bAutoDelete = FALSE;
      hThread[i] = pThread[i]->m_hThread;
      pThread[i]->ResumeThread();
    }WaitForMultipleObjects(MAX_THREAD_COUNT, hThread, TRUE, INFINITE);
    for(size_t i = 0; i != MAX_THREAD_COUNT; ++i)
    {
     CloseHandle(hThread[i]);
     hThread[i] = NULL;
      delete pThread[i];
     pThread[i] = NULL;
    }
      

  2.   

    这样写后程序直接锁死了~怎么回事?
    那的看你的线程函数中写了些什么?
    函数是这个
    UINT ThreadPortScan(LPVOID lp)
    {
    timeout.tv_sec = 1; //定义超时时间

    int retal = 0;
    SOCKET sockfd;
    sockfd = socket(AF_INET,SOCK_STREAM,0);
    if(sockfd == INVALID_SOCKET)
    {
    return 0;
    }
    unsigned long arg = 1;
    retal = ioctlsocket(sockfd, FIONBIO, &arg); sockaddr_in des;
    des.sin_family = AF_INET;
    des.sin_addr.s_addr =inet_addr(HostAddr);
    int Port = *(int*)lp;    //传递的是端口号
    des.sin_port = htons(Port); connect(sockfd, (struct sockaddr *)&des, sizeof(des)); FD_ZERO(&mask);
    FD_SET(sockfd,&mask);
    retal = select(0, NULL, &mask, NULL, &timeout);
    if((retal == 0) || (retal == -1))
    {
    closesocket(sockfd);
    }
    else
    {
    closesocket(sockfd);
    char buf[100];
    sprintf(buf, "端口%d为开放状态", Port);
    m_pDlg->PrintInfo(buf);//打印信息
    }

    return 0;
    }
    我用VC调的··
      

  3.   

    照我自己之前的写法··我使用getlasterror后~得出的错误是句柄无效,可是不懂怎么解决啊…………
      

  4.   

    http://blog.csdn.net/lyd_253261362/article/details/4450202
    希望对你有帮助。