我有个菜单命令的执行过程是这样的:输出exe文件需要的文件in -> 调用exe程序 -> 读入exe文件产生的结果文件outexe文件执行计算功能,运行时间大概为0.1s~10s(视计算规模而定).调用过程语句是:
::ShellExecute(NULL,"open","constant.exe",NULL,NULL,SW_HIDE);//调用计算程序...
以下紧跟读入结果文件的模块.
【现在的问题是】
读入数据的程序表现非常不稳定,我怀疑是执行计算的同时在读入结果文件,不知是不是这样的,如果是,该如何改正?我想让程序在计算完成后在读入结果文件。

解决方案 »

  1.   

    是访问冲突了
    方法1:
    while(1)
    {
    if(检查处理完)
    {
    break;
    }
    }方法2:
    声明进程间通信事件,文件处理完就改变状态挂起,等待该事件其他进程间通信机制都可以用
      

  2.   

    能不能通过设置调用函数ShellExecute的参数的方式解决呢?
      

  3.   

    exe程序计算完是否就立即退出了,如果是的话,可以调用WaitForSingleObject来等待计算进程的结束,然后读取out文件
      

  4.   

    如何启动一个程序,直到它运行结束? 
    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...");
    }