我使用beginthreadex创建两个线程,最近才发现在一个新工程中出现的问题:
调用函数后返回了线程句柄,但是线程并没有创建成功,在debug下跟踪线程内函数没有成功,在vc6的环境中查看线程列表也没有新建的线程
尝试了几次,只有一次线程成功创建,但是相同的代码在其他工程中就没有问题,可能是什么方面的原因呢.......

解决方案 »

  1.   

    返回非0就表示创建成功了,除非是遇到VC的bug,你可以在线程函数入口显示个MessageBox看看。
      

  2.   

    新进展:现在发现vc在beginthreadex后并没有马上进入新创建的线程工作,虽然新线程需要的环境已经准备好,但需要主线程运行阻塞后才会启动新线程,如果在beginthreadex后马上sleep(1),则可以进入创建的线程....
    但现在我希望是新线程能尽快开始工作,使用sleep(1)的话并不能保证线程能启动,但使用等待事件又只能等待一个新线程启动,使用信号量等待又觉得小题大做,各位有没有什么好主意......
      

  3.   

    听你描述像是主线程结束的太快了
    “但使用等待事件又只能等待一个新线程启动”什么意思?WaitForSingleObject应该是可以等到子线程结束。
    试试在主线程调用SwitchToThread 
      

  4.   

    对于单核系统,主线程的时间片没有用完之前,线程是不会得到运行的,只能是通过Sleep等方法放弃时间片。
      

  5.   

    你主线程应该等待新线程启动,不能让主线程直接就跑完了,让主线程WaitForSingleObject,等待一个子线程事件
      

  6.   

    WaitForMultipleObjects()可以等待多个线程的Event
      

  7.   

    sleep(0) 好像就是放弃当前线程的时间片吧!
      

  8.   

    sleep(1) 一般和sleep(10)差不多.
    好像可以调整 使sleep(1) 近乎 2~3 ms
      

  9.   

    sleep(1)和Sleep(2)sleep(49)效果是一样的。