AfxBeginThread,CreateThread,_createthreadex 或者别的高手给出答案并解释 谢谢.

解决方案 »

  1.   

    开上千线程?开开开玩笑吧?一个线程Stack 1M, 一千个县城光Stack就是1G内存。CPU全做Context Switching了。什么样的程序需要这么多线程?这三个API意思差不多,你如果是MFC APP就用Afx,如果用Runtime了就用_beginthreadex(不是_create),User App很少直接用CreateThread,因为我们的程序都Link Runtime(除非你自己写Min CRT),CreateThread会造成Memory Leak。
      

  2.   

    感谢一楼,Runtime这个词不太理解,呵呵 大家别急啊 不知 S扫描你们用过没  它最多能同时扫1000个机器 不知道它是怎么做的呢?
      

  3.   

    The number of threads a process can create is limited by the available virtual memory and depends on the default stack size. If every thread has 1 MB of stack space, you can create a maximum of 32 threads.
    If you reduce the default stack size, you can create more threads. 一楼说的是在default的情况下,而且如果在thread stack为1mb的情况下最多可以create 32个线程,但如果你减少stack size的可以创建多个线程。对于你说的同时能扫描1000个机器并不是开1000个threads,这是你理解上的错误,因为他是并发操作的,而非并行处理的。而同时处理这么多的机器不是简单的光开线程就能完成的。
      

  4.   

    use _beginthreadex or AfxBeginThread
    agree with ouyh12345(五岭散人) and feimingbiao()
      

  5.   

    设计IOCP就是为了来做这种大吞吐量的程序的
      

  6.   

    我也想用IOCP 可是我底子薄.. 谢谢你的建议.我会写的.
      

  7.   

    http://www.codeproject.com/internet/NagTPortScanner.asp这个是基于Winpcap的
      

  8.   

    应该是差不多的,Windows里的线程据我所知只有一种。
      

  9.   

    for (int nCount=0; ;nCount++)
    {
        hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadScanProc,
            (LPVOID)ptThreadParameter, NULL, NULL);
        Sleep(1);
        CloseHandle(hThread);
    }我这循环建线程 有的时候正常速度 有的时候超快 导到.出错 不知道为什么 不稳定.
      

  10.   

    期待...高手.
    /////////////////////////////////////////////////////////////////////////////////////
    最大的高手是你自己,只有你自己才能真正解决自己的问题.
    ^_^for (int nCount=0; ;nCount++)
    {
        hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadScanProc,
            (LPVOID)ptThreadParameter, NULL, NULL);
        Sleep(1);
        CloseHandle(hThread);
    }
    ///////////////////////////////////////////////////////////////////////////////////
    疯子.你不断的CreateThread是什么意思?而且还是同一个线程.
    一个线程只需要一次,除非这个线程已经结束!
      

  11.   

    楼上的是不是在XP sp2下测试的啊
    每次都能到2000个线程左右么?
      

  12.   

    cnvb(壮士沈), Windows下没有线程数的上限,你想建多少就建多少,直到你的虚拟内存光了为止,你观察到的2000多一点儿是因为每个线程缺省占1M空间,最后用了2G你的机器吐血了。你把CreateThread的第二个参数从 0  改成 1024,这样就可以开 20 万个线程了。
      

  13.   

    我的程序有个banner 显示开端口的IP和线程目录的数量,建线程时的时间间隔是Sleep(1),在多数情况下的这个banner刷的都很慢,线程数量一直都不超过200, 但是有时不知道为什么速度就失控制,变的非常的快一能上1000多,但是影响了扫端口的质量,几乎扫不到什么. 好像与IP段无关,另外我肯定我没改过什么, 这种不稳定时不是的出现. 另外我提一下 我扫端口用的主要是connect这个函数!!
      

  14.   

    feimingbiao() ( ) 信誉:98  2007-09-07 09:20:26  得分: 0  
     
     
       cnvb(壮士沈), Windows下没有线程数的上限,你想建多少就建多少,直到你的虚拟内存光了为止,你观察到的2000多一点儿是因为每个线程缺省占1M空间,最后用了2G你的机器吐血了。你把CreateThread的第二个参数从 0  改成 1024,这样就可以开 20 万个线程了。
      
     
    ------------------------
    哦 对 不过没吐血,测试程序而已 呵呵 实际上没耗资源 fgwxybmt(++CV) ( ) 信誉:100  2007-09-07 10:03:02  得分: 0  
     
     
       我的程序有个banner 显示开端口的IP和线程目录的数量,建线程时的时间间隔是Sleep(1),在多数情况下的这个banner刷的都很慢,线程数量一直都不超过200, 但是有时不知道为什么速度就失控制,变的非常的快一能上1000多,但是影响了扫端口的质量,几乎扫不到什么. 好像与IP段无关,另外我肯定我没改过什么, 这种不稳定时不是的出现. 另外我提一下 我扫端口用的主要是connect这个函数!!
      
     
    -------------------------------你的函数改下先 
    BOOL Runflag=TRUE;
    while(Runflag)
    {
      if(NULL==CreateThread())//省略
      {
           Runflag=FALSE;   }
      else
       //ok TODO:
    }
      

  15.   

    哦 明白了 那为什么有的时候 会突然大批量的CreateThread不成功呢?
      

  16.   

    我想问问 半开放的准备性 我用connect准确率能达到95以上,当然半开放一定是很快的.
      

  17.   

    不知道你们在使用半扫描和隐蔽扫哦得时候,有没发现一个问题,
    就是在使用raw_socket,调用sendto()发送TCP包得时候 ,发不出去,要报10004这个错误
    这个错误在sp2后都会有,不知道哪些大侠解决了,敬请赐教,感激万分!