2

我有一个通过单击按钮启动 cli 程序的 GUI 程序。我想看到控制台窗口,不需要等到 cli 程序结束。所以我使用这样的代码:

QProcess::startDetached("cmd.exe");

单击按钮后,我看不到控制台窗口。但在任务管理器中查看 cmd.exe 进程。

我尝试使用 system() 命令,但它在 cli 程序结束之前冻结了我的应用程序。

有没有办法让窗口可见?

4

1 回答 1

0

这是预期的行为。至少在 WindowsstartDetached中相当于CreateProcess使用DETACHED_PROCESS标志调用,其中新进程不继承其父级的控制台。有意义的是,在其他平台上,该方法会做类似的事情。

在这种情况下,您必须手动分配一个使用AllocConsole新进程的新进程(请注意,您可能需要将流式处理句柄重定向到新控制台),或者尝试以不同的方式启动进程(检查CreateProcessfork) .

顺便说一句,system冻结您的应用程序的原因是因为它是一个同步调用,所以在其他进程完成之前它不会返回控制权。您可以尝试从单独的线程调用system,这样可以避免阻塞应用程序的主事件循环。

于 2017-02-17T08:10:36.703 回答