VC ++ std :: system()API在调用CMD.exe后立即返回

时间:2014-12-09 10:56:47

标签: c++ visual-c++ system std createprocess

我知道system()在内部调用“CreateProcess()”。

但是从应用程序的角度来看,我看到了它的一个主要区别。 我们来看下面的示例代码片段。

VC ++ Code snippet ::

Main()
{
//Line 1 code....
//Line2 code.....
............

CreateProcess(); // Used to launch some app which needs to be kept running till the entire //program finishes.   

LaunchWindowsMediaPlayer();
...

}

}

Main()
    {
    //Line 1 code....
    //Line2 code.....
    ............

    std::system();   // // Same as above -- Used to launch some app which needs to be kept running //till the entire program finishes.

    LaunchWindowsMediaPlayer();
    ...

    }

CreateProcess()USage

如第一段代码所示,如​​果我在此代码中调用“CreateProcess()”,那么在启动应用程序uisng CreateProcess()之后,控件将立即转到下一行并调用LaunchWindowsMediaPlayer();.

但是在system()(第二个代码片段)的情况下,控件只有在完成系统执行后才会从system()返回(0应该这样做。

但是如果你有一个用例,你需要运行一些需要在整个代码中保持运行的帮助应用程序,那么就不可能使用system()API。

有没有办法使用system()API实现这个目标?

2 个答案:

答案 0 :(得分:1)

使用ShellExecuteEx()API。而不是system()。

答案 1 :(得分:0)

这取决于底层系统(例如Windows,Unix等)。库函数system将字符串传递给命令解释器,命令解释器然后根据其约定解释参数。在Windows中,通常使用命令start来完成,因此,不是传递"mycommand args",而是传递"start /B mycommand args"; /B是为了防止创建新窗口。 (请注意,我实际上没有尝试过这个;我在这个领域的经验是在Unix中,只需要&后面的命令。但根据文档,它应该可以工作。)

相关问题