我有一个通过单击按钮启动 cli 程序的 GUI 程序。我想看到控制台窗口,不需要等到 cli 程序结束。所以我使用这样的代码:
QProcess::startDetached("cmd.exe");
单击按钮后,我看不到控制台窗口。但在任务管理器中查看 cmd.exe 进程。
我尝试使用 system() 命令,但它在 cli 程序结束之前冻结了我的应用程序。
有没有办法让窗口可见?
我有一个通过单击按钮启动 cli 程序的 GUI 程序。我想看到控制台窗口,不需要等到 cli 程序结束。所以我使用这样的代码:
QProcess::startDetached("cmd.exe");
单击按钮后,我看不到控制台窗口。但在任务管理器中查看 cmd.exe 进程。
我尝试使用 system() 命令,但它在 cli 程序结束之前冻结了我的应用程序。
有没有办法让窗口可见?
这是预期的行为。至少在 WindowsstartDetached
中相当于CreateProcess
使用DETACHED_PROCESS
标志调用,其中新进程不继承其父级的控制台。有意义的是,在其他平台上,该方法会做类似的事情。
在这种情况下,您必须手动分配一个使用AllocConsole
新进程的新进程(请注意,您可能需要将流式处理句柄重定向到新控制台),或者尝试以不同的方式启动进程(检查CreateProcess
或fork
) .
顺便说一句,system
冻结您的应用程序的原因是因为它是一个同步调用,所以在其他进程完成之前它不会返回控制权。您可以尝试从单独的线程调用system
,这样可以避免阻塞应用程序的主事件循环。