ShellExecute(this->m_hWnd ,"open","svm-train.exe","output_train.txt","",SW_HIDE);

AfxMessageBox("训练结束!");
第一句没执行玩,下一句就执行了,这样导致我以为程序执行完了,就会接着执行下面的程序,就会出错。
为什么不是执行完第一句,才执行第二局呢,第一次发帖,还请大虾们指教啊。

解决方案 »

  1.   

    ShellExecute(this->m_hWnd ,"open","svm-train.exe","output_train.txt","",SW_HIDE);
    Sleep(500);
    AfxMessageBox("训练结束!");
      

  2.   

    第一句完了, 但svm-train.exe还没完
      

  3.   

    改用
    ShellExecuteEx
    WaiForSingleObject
      

  4.   

    改用
    ShellExecuteEx
    WaitForSingleObject
      

  5.   

    你这个第一句是调用外部程序,不存在没有执行完的问题,ShellExecute是非同步的,它启动外部程序之后就会返回。
    如果想达到你的目标,你可以用CreateProcess创建一个进程,获得一个进程句柄,然后用WaitForSingleObject等待这个句柄,这样能达到你的目的。
      

  6.   

    CreateProcess 不太会用,可以尝试下,但我想知道为什么我那个不可以呢。每次都是第一句没执行完就执行第二局
      

  7.   

    ShellExecute()是异步执行的,最好用CreateProcess();BOOL WINAPI ExecuteFile(LPTSTR lpFile, LPCTSTR lpCmdLine)
    {
    STARTUPINFO si = {0};
    PROCESS_INFORMATION pi = {0}; si.cb = sizeof(STARTUPINFO); if(!CreateProcess(lpFile, lpCmdLine, NULL, NULL, NULL, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi))
    {
    return FALSE;
    }

    WaitForSingleObject(pi.hProcess, INFINITE);
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);

    return TRUE;
    }
      

  8.   

    不好意思弄错了,觉得三楼有道理,第一句只是启动svm-train.exe,在svm-train.exe运行时,就执行第二句导致程序出错。有什么解决方法吗?
      

  9.   

    谢谢zwfgdlc同学,提到的异步执行指的是什么呢,是否是我在15楼说的呢
      

  10.   

    同意13楼,ShellExecute是异步的,它启动程序后立刻就返回了。是多任务的特性罢了。