我有个菜单命令的执行过程是这样的:输出exe文件需要的文件in -> 调用exe程序 -> 读入exe文件产生的结果文件outexe文件执行计算功能,运行时间大概为0.1s~10s(视计算规模而定).调用过程语句是:
::ShellExecute(NULL,"open","constant.exe",NULL,NULL,SW_HIDE);//调用计算程序...
以下紧跟读入结果文件的模块.
【现在的问题是】
读入数据的程序表现非常不稳定,我怀疑是执行计算的同时在读入结果文件,不知是不是这样的,如果是,该如何改正?我想让程序在计算完成后在读入结果文件。
::ShellExecute(NULL,"open","constant.exe",NULL,NULL,SW_HIDE);//调用计算程序...
以下紧跟读入结果文件的模块.
【现在的问题是】
读入数据的程序表现非常不稳定,我怀疑是执行计算的同时在读入结果文件,不知是不是这样的,如果是,该如何改正?我想让程序在计算完成后在读入结果文件。
方法1:
while(1)
{
if(检查处理完)
{
break;
}
}方法2:
声明进程间通信事件,文件处理完就改变状态挂起,等待该事件其他进程间通信机制都可以用
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = "c:\\MyProgram.exe";
ShExecInfo.lpParameters = "";
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
或: PROCESS_INFORMATION ProcessInfo;
STARTUPINFO StartupInfo; //This is an [in] parameter
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof StartupInfo ; //Only compulsory field
if(CreateProcess("c:\\winnt\\notepad.exe", NULL,
NULL,NULL,FALSE,0,NULL,
NULL,&StartupInfo,&ProcessInfo))
{
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
}
else
{
MessageBox("The process could not be started...");
}