各们高手,小可写的一个基于基本对话框MFC的程序,其中一部分功能是一个循环(循环中有延时函数)后完成一个功能;例如10秒中(循环10次,一秒的延时)后由调用.exe来运行另外一个程序,但问题是当我在此十秒种内后诲了这个操作,即使我取消整个程序的运行,可其线程仍在,.exe的程序照样调用,请问各位这是什么问题,要怎么解决啊???

解决方案 »

  1.   

    按照你上面描述的话,你取消整个程序的运行,貌似只是Destroy了Window,只是把窗口给销毁了,进程还在。看看销毁窗口做了什么操作了
      

  2.   

    只有把你创建的新的进程ID,或则句柄记录下来,关程序的时候挨个给他们发WM_CLOSE消息
      

  3.   

    //对话框类CDlg的成员变量
    BOOL m_bRun;
    BOOL m_hThread;//开始10秒中(循环10次,一秒的延时)后由调用.exe来运行另外一个程序
    void CDlg::StartRunExe()
    {
    g_bRun=True;//设置g_bRun
    //创建线程
    m_hThread=CreateThread(...)
    }//十秒种内后诲了这个操作,即使我取消整个程序的运行
    void CDlg::StopRunExe()
    {
    g_bRun=False;
    WaitForSingleObject(m_hThread,1000+10);
    if(!GetExitCodeThread(m_hThread,&exitcode))
    {
    TerminateThread(m_hThread,exitcode);
    }
    CloseHandle(m_hThread);
    m_hThread=NULL;
    }//运行exe的线程
    DWORD WINAPI CDlg::RunExeThread(LPVOID lpParam)
    {
    CDlg *pDlg=(CDlg*)lpParam;
    int nCnt=0;
    while(pDlg->m_bRun&&nCnt<10)
    {
    nCnt++;
    Sleep(1000);
    }
    if(nCnt>=10)
    {
    //运行exe
    }

    return 0;
    }
    这样试下行不?
      

  4.   

    "即使我取消整个程序的运行,可其线程仍在"这句是指拥有该线程的进程关闭了?如果那样,线程也同时停止了。如果只是点了一个按钮,要停止该程序,那么可以设置一个BOOL型变量,当线程遇到这个变量为FALSE时,就退出,或挂起。
      

  5.   

    这好像不是线程的结束哪!CreateProcess(NULL,lpBrdPath,NULL,NULL,FALSE,0,NULL,lpCurrentDirectory,&stInfo,&prcInfo)prcInfo这里面有exe的句柄,存起来,想关闭的话,closewindow(handle)就OK了