我在主线程里面使用如下形式,调用 CreateThread 始终得不到正确的结果(检验本地某些端口是否开放)。for i := 0 to 9 do
  CreateThread(...)而在加上 WaitForSingleObject 之后却可以了.for i := 0 to 9 do
  WaitForSingleObject(CreateThread(...), 1000)请问这是为什么呢?

解决方案 »

  1.   

    for i := 0 to 9 do 
      WaitForSingleObject(CreateThread(...), 1000)
    这就没意义了,要等到上一个线程结束后才创建下一个线程。
    估计是线程中使用了同一资源导致其他线程获取不到而发生错误。
      

  2.   


    什么叫得不到正确结果?线程未启动?HANDLE WINAPI CreateThread(
      __in          LPSECURITY_ATTRIBUTES lpThreadAttributes,
      __in          SIZE_T dwStackSize,
      __in          LPTHREAD_START_ROUTINE lpStartAddress,
      __in          LPVOID lpParameter,
      __in          DWORD dwCreationFlags,    //0的话则挂起,直到调用ResumeThread function 
      __out         LPDWORD lpThreadId
    );
    还用是不是在之前写了信号量或者互斥对象啥的!?
      

  3.   


    感谢各位的回答.为了便于观察, 我把 1000 改作 5000, 实际情况是好象就等了 5 秒, 然后 10 个线程就一块儿执行了.而不是每隔 5 秒启动一个线程.(10 个线程检测 10 个端口, 这 10 个端口都是关闭的)程序中原来使用了一些全局变量, 没有同步.现在在线程函数里面使用了临界区, 启动线程还是用下面的
    for i := 0 to 9 do 
      CreateThread(...) 
    这样检测结果是正确的, 但速度很慢 ...