我使用以下语句来生成并运行一个线程:         CWinThread * pThread1; pThread1=AfxBeginThread(RecvThread1,(LPVOID)this);如何才能在线程外部终止这个线程?

解决方案 »

  1.   

    CSDN上说:AfxEndThread must be called from within the thread to be terminated. If you want to terminate a thread from another thread, you must set up a communication method between the two threads.不过你为什么一定要在线程外部终止线程,没有别的办法了吗?如果你一定要,建议你使用CreateThread来启动线程,然后保存该函数返回的线程句柄,需要时利用该句柄使用函数TerminateThread终止目标线程。
      

  2.   

    设个BOOL型全局量,true时运行,false时退出,while (bRun)
    {
    }
      

  3.   

    不要使用TerminateThread终止目标线程,这样你的线程就没有任何机会释放分配的内存了。可以做一个标志BOOL bExit;
    if(bExit)
    {
       将分配的内存释放(如果有的话)
       ExitThread();
    }
      

  4.   

    可是,如果在主程序结束时子线程处于挂起状态(有这种情况存在),那么,子线程就不能执行该if语句,也就是说,子线程还是不能结束了。
    有没有一种类似于linux下的wait(),signal()信号机制?
      

  5.   

    to faichen:
    这是函数吗?能不能详细一点,多谢!
      

  6.   

    HANDLE g_hExitEvent,g_hHaveExitEvent;//线程启动时
    g_hExitEvent = CreateEvent(NULL, true, false, NULL);
    g_hHaveExitEvent = CreateEvent(NULL, true, false, NULL);
    CWinThread * pThread1 = AfxBeginThread(RecvThread1,(LPVOID)this);//线程函数RecvThread1
    while(WaitForSingleObject(g_hExitEvent, 0) == WAIT_TIMEOUT) //检测要求线程结束信号是否设置
    {}
    SetEvent(g_hHaveExitEvent); //发出线程已经退出的信号
    //RecvThread1//结束线程(主程序退出时)
    SetEvent(g_hExitEvent);
    pThread1->ResumeThread();
    WaitForSingleObject(g_hHaveExitEvent, INFINITE); //检查线程是否退出
    CloseHandle(g_hExitEvent);
    CloseHandle(g_hHaveExitEvent);