最近学习线程调用遇到这样的问题,在主线程中创建子线程,此时使主线程挂起,子线程执行完毕之后再恢复主线程。
采用了两种方法。
法一、采用sleep方法,即创建子线程后就使主线程sleep一段时间,但是这个时间不好控制。因此考虑采用方法二。
法二、采用SuspendThread 和 ResumeThread,即创建子线程后,调用 SuspendThread挂起主线程,子线程中在最后执行SuspendThread。但是发现只挂起恢复了一次,第二次就不能正常挂起。
在网上找资料有网友说SuspendThread 和 ResumeThread可能出现问题。所以请问各位第二种方法能不能解决问题,如果不能解决问题有没有什么好方法能在子线程执行时挂起主线程,而且时间又不固定。多谢!

解决方案 »

  1.   

    在主线程内DWORD WaitForSingleObject();
    参数为创建子线程的线程句柄和INFINITE。就搞定了!
      

  2.   

    最近学习线程调用遇到这样的问题,在主线程中创建子线程,此时使主线程挂起,子线程执行完毕之后再恢复主线程。
    ===============
    用WaitForSingleObject等待子线程的句柄不就行了,何必那么麻烦。
      

  3.   

    你这个需求在主线程中WaitForSingleObject就可以啊
    甚至没有必要使用多线程
      

  4.   


    补充说明,我现在是创建了4个子线程,是不是应该用WaitForMultiObject呢?这两个函数在各线程内部还需要做什么?也就是说什么时候返回主线程呢?是一个线程完成就返回还是各线程都结束才返回? 
      

  5.   

    补充说明,我现在是创建了4个子线程,是不是应该用WaitForMultiObject呢?
    ==============
    用WaitForMultipleObject也是可以的。这两个函数在各线程内部还需要做什么?也就是说什么时候返回主线程呢?
    ==================================================
    对于WaitFofMultipleObject来说,线程内部并不要做什么特殊处理,正常退出即可。当线程没有退出时,WaitForMultipleObject等函数会阻塞住主线程,一直等到它等待的线程结束。是一个线程完成就返回还是各线程都结束才返回?
    ===============
    这个要看你的用法了。
    DWORD WaitForMultipleObjects(
      DWORD nCount,
      const HANDLE* lpHandles,
      BOOL bWaitAll,//这个如果是真的话,则要等全部线程结束才能返回。否则只要有一个结束就会返回。
      DWORD dwMilliseconds
    );
      

  6.   

    在主线程内DWORD WaitForSingleObject();
    参数为创建子线程的线程句柄和INFINITE。就搞定了!
    方法比较多,采用互斥对象 关键代码段,都是可以的!