线程的结束问题 各们高手,小可写的一个基于基本对话框MFC的程序,其中一部分功能是一个循环(循环中有延时函数)后完成一个功能;例如10秒中(循环10次,一秒的延时)后由调用.exe来运行另外一个程序,但问题是当我在此十秒种内后诲了这个操作,即使我取消整个程序的运行,可其线程仍在,.exe的程序照样调用,请问各位这是什么问题,要怎么解决啊??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 按照你上面描述的话,你取消整个程序的运行,貌似只是Destroy了Window,只是把窗口给销毁了,进程还在。看看销毁窗口做了什么操作了 只有把你创建的新的进程ID,或则句柄记录下来,关程序的时候挨个给他们发WM_CLOSE消息 //对话框类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;}这样试下行不? "即使我取消整个程序的运行,可其线程仍在"这句是指拥有该线程的进程关闭了?如果那样,线程也同时停止了。如果只是点了一个按钮,要停止该程序,那么可以设置一个BOOL型变量,当线程遇到这个变量为FALSE时,就退出,或挂起。 这好像不是线程的结束哪!CreateProcess(NULL,lpBrdPath,NULL,NULL,FALSE,0,NULL,lpCurrentDirectory,&stInfo,&prcInfo)prcInfo这里面有exe的句柄,存起来,想关闭的话,closewindow(handle)就OK了 如何开发一个Word 2007有自定义ribbon的插件啊? 远程主机强迫关闭了一个现有的连接 WebBrowser控件 如何判断网页全部打开呢? datagrid对应的是那个dll?我想使用这个控件,在vc中怎么添加进来?谢谢 关于句柄、死机的问题 为什么在Win2000运行正常的程序到了win98会出现Runtime Error,详细错误信息请进 在win2k中隐藏程序 谁能给个关于处理一个CString中相同子窜的处理函数? 关于局域网之间的连接以及完成端口 如何保持标题不变 控制台Console的关闭事件怎么弄? 急!!!vc++两个不同cpp文件间函数调用
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;
}
这样试下行不?