我的一个MFC程序要调用一个dos版的可执行程程序,该dos程序先读取数据文件A.dat,当其执行完成还要生成数据文件B.dat,而这期间是需要一定时间的。然后MFC再读取其生成的数据文件B.dat进行计算下一步的运算。
我试图用WinExec(CurrentDir,SW_HIDE);和ShellExecute(NULL, NULL,CurrentDir, NULL, NULL, SW_HIDE); 但都出现问题。因为数据文件B.dat还未生成MFC就进行下一步了,以至于计算结果有问题。
网上也有很多这方面的介绍,但思路还不甚明了,在此请教大家!
HANDLE hProg; 
hProg=ShellExecute(NULL, NULL,CurrentDir, NULL, NULL, SW_HIDE); 
WaitForSingleObject(hProg, INFINITE);
好像还是不行。

解决方案 »

  1.   

    调用a.exe,然后循环等待当前目录下出来b.dat,等待之间用peekmessage让出系统时间。
      

  2.   

    用CreateProcess然后用WaitForSingleObject
      

  3.   


    误人子弟,典型的忙等待,即使你PeekMessage了。
      

  4.   

    O(∩_∩)O哈哈~
    用2楼的方法"CreateProcess然后用WaitForSingleObject”比较常见,但具体该怎么做呢?
    CreateProcess()的参数好像比较复杂,返回参数也不像是句柄,而WaitForSingleObject(hProg, INFINITE);是要句柄的。HANDLE hP = CreateProcess(“***.exe”,NULL, NULL, NULL,FALSE, 0, NULL, NULL, NULL, NULL);
    WaitForSingleObject(hProg, INFINITE);
    仍然不行啦
      

  5.   

    CreateProcess的最后一个参数是LPPROCESS_INFORMATION lpProcessInformation,给个合法的指针,WaitForSingleObject的时候第一个参数用lpProcessInformation->hProcess
      

  6.   

    一般为了让DOS可控,都是用CreateProcess来做的
      

  7.   

    waitforsingleobject会使线程僵死,在我看来,这是更不好的。我用过多种等待方法,越简单的越保险。
      

  8.   

    2种方法
    1,使用定时器,dos一执行完把定时器置为真,计算程序一结束,把定时器置为假
    2,用一个线程不停地尝试打开b.dat,直到能打开再进行下一步