一个线程,用来等待某事件的发生。其它线程如何得知此线程是否终止,如何终止此线程?

解决方案 »

  1.   

    线程终止存在两种情况:
    1、线程函数结束,线程自动终止;
    2、采用AfxEndThread、_endthreadex、TerminateThread强制终止线程。
    你可以为这个线程设置一个BOOL标志位,在线程创建的时候将其设为TRUE,在线程结束的时候,在线程函数中将其设为FALSE,全局变量或者是创建线程的类的成员变量都可。另外可以通过事件告诉其他线程这个线程结束了。
      

  2.   

    下面的一个方法供参考:
    /*****************************************************************
    ** 函数名: TerminatePPT
    ** 输 入:
    ** 输 出:  
    ** 功能描述:终止PowerPoint进程
    ** 全局变量:
    ** 调用模块:
    ** 作 者:  
    ** 日 期: 2003-06-25
    ** 修 改:
    ** 版本: 2.0.0
    ****************************************************************/
    BOOL CVConClient_Page_IE::TerminatePPT()
    {
    HANDLE hSnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    PROCESSENTRY32* processInfo=new PROCESSENTRY32;
    int processID  = 0; processInfo->dwSize=sizeof(PROCESSENTRY32);
    int index=0;

    while(Process32Next(hSnapShot,processInfo)!=FALSE)
    {
    if(strcmp(processInfo->szExeFile,"POWERPNT.EXE") == 0)
    {
    processID = processInfo->th32ProcessID;
    break;
    }
    }

    CloseHandle(hSnapShot);

    HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,TRUE,processID);

    if(hProcess==NULL)
    {
    delete processInfo;
    return FALSE;
    }

    TerminateProcess(hProcess,0);
    CloseHandle(hProcess);

    delete processInfo;
    processInfo = NULL;
    return TRUE;
    }