Thread()
{
    while(true)
    {
        ....
        if( WaitForSingleObject( g_Event ) )
            break;
    }
}OnTimer()
{
    Func_1();
    Func_2();
}Func_1()
{
    g_Event.SetEvent();
    ....
    Sleep(**);
}Func_2()
{
    ....
}程序启动后即启动线程,Timer到时后分别运行Func_1,Func_2。
发现只有Func_1,Func_2全部结束退出OnTimer后,线程才继续运行。
如果把Func_1,Func_2放在其他消息的响应函数中,同样会这样。
因为Func_2中的操作是必须以线程结束为前提的,所以会出错,希望高手指点一下这种问题出现的原因,以及如何解决,多谢!

解决方案 »

  1.   

    如果func2需要等线程结束,你应该用waitforsingleobject等待线程句柄
      

  2.   

    你的意思是线程在FUNC1全部结束以后再执行,而不是FUNC1执行完SETEVENT以后执行?
      

  3.   

    这样需要在线程结束的时候SetEvent吧?试过,这样直接就死锁了。
      

  4.   

    线程在Func_2之后才开始执行呢。这就是我困惑的地方
      

  5.   

    Func_1() 开始执行线程
    Func_2() 等待线程结束(用waitforsingleobject)
    这两个函数不能放一起,把Func_2()放在你想等待的地方很明显的问题,同志
      

  6.   

    Func_1里面就是设置了线程结束的Flag,然后等待线程结束。
    Func_2的操作就是给另外一个窗口发消息用来显示线程中接收到的数据,然后释放资源,由于县城没有按照预想的退出,所以出了问题。很奇怪,我自己写了一个简短的测试程序,没有问题,线程在Func2之前退出了。不知道这个工程里面出了什么问题,明天看代码。