请教:如何检测程序是否运行结束?

fanlin00428 2005-04-08 04:37:54
在程序中调用一个"a.exe"的执行程序在后台运行。该程序正常情况下执行完毕后自动退出,但执行时间不定。异常情况下执行完毕不退出,造成下次调用时出错。请问:1.在正常情况下如何检测该程序已经运行结束?2.异常时如何检测没有退出,然后强行退出?请不吝赐教,高分酬谢!
...全文
217 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnwolf 2005-04-10
  • 打赏
  • 举报
回复
创建进程锁可以吗

每次进入时查看是否已经创建,程序退出时删除

HANDLE hObject = CreateMutex(NULL,FALSE,"LJPXYXC");
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
CloseHandle(hObject);
AfxMessageBox("程序已经运行!");
return FALSE;
}
Kid4you 2005-04-10
  • 打赏
  • 举报
回复
HANDLE CJudgerDlg::NewProcess(CString &strFileName, int nFlag)
{
STARTUPINFO StartupInfo;
::memset( &StartupInfo, 0, sizeof(STARTUPINFO) );
StartupInfo.cb = sizeof(STARTUPINFO);
StartupInfo.dwFlags = STARTF_USESHOWWINDOW;
PROCESS_INFORMATION ProcessInfo;

// 创建进程
if ( ! ::CreateProcess( strFileName, NULL, NULL, NULL,
TRUE, 0, NULL, NULL, &StartupInfo, &ProcessInfo ) )
{
return FALSE;
}

// 确定是否对已经生成的新进程等待
switch( nFlag )
{
case NP_WAITFOR_INIT: // 等待新进程初始化完毕后再返回控制
if ( 0xFFFFFFFF == ::WaitForInputIdle( ProcessInfo.hProcess, INFINITE ) )
{
return FALSE;
}
return ProcessInfo.hProcess;
break;

case NP_WAITFOR_EXIT: // 等待新进程运行结束后再返回控制
if ( WAIT_FAILED == ::WaitForSingleObject( ProcessInfo.hProcess, INFINITE ) )
{
return FALSE;
}
else
{ // 得到新进程的返回码
DWORD dwExitCode;
if ( ! ::GetExitCodeProcess( ProcessInfo.hProcess, &dwExitCode ) )
return FALSE;
return (HANDLE)dwExitCode;
}
break;

case NP_NOWAIT: // 立即返回控制
return ProcessInfo.hProcess;
break;

default: // 用户必须选择正确的 nFlag 参数
ASSERT( FALSE );
return FALSE;
break;
}
}

//调用外部EXE文件
NewProcess(strFileName, NP_WAITFOR_EXIT); //NP_WAITFOR_EXIT表示等待程序执行完毕
vcmute 2005-04-10
  • 打赏
  • 举报
回复
监控?try
GetExitCodeThread
GetExitCodeProcess
fanlin00428 2005-04-10
  • 打赏
  • 举报
回复
自己顶一下,没人愿意帮我吗?还是嫌分太少,可以商量嘛!
oyljerry 2005-04-10
  • 打赏
  • 举报
回复
WaitForSingleObject()等待进程handle,看是否返回

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧