2014-10-28 104 views
0

我的代码(简单的控制台应用程序)调用外部程序(也是控制台应用程序)。这个程序向控制台吐出了很多东西,当以10,000+迭代的批处理模式运行时,这会显着增加运行时间。禁用来自外部程序的控制台输出(C++)

我试过几种方法来禁止输出:

  1. 重定向cout和CERR到FOUT - >显然适用于当前/本地程序禁用COUTS,但不会禁用任何东西一个外部的.exe。

  2. 有些来源建议使用系统(“cls”),但所有功能都会在显示文本后清除屏幕。这增加了更多的时间。

  3. 另一个建议是隐藏控制台窗口,但程序仍然写入隐藏控制台,因此整个过程仍然或多或少需要同一时间。

看起来剩下的唯一方法是挖掘外部程序的源代码并禁用所有写入命令或将其重定向到dev/null或其他东西。

有没有办法禁用程序写入控制台命令而无需更改源代码并重新编译?

非常感谢!

+0

你怎么真的调用该程序?如果它是'system()',你应该简单地将输出重定向到你放在那里的命令。 – 2014-10-28 10:42:11

+0

我正在使用ShellExecute。我将如何重定向system()的输出?我对此不太了解。谷歌搜索! – crabwalk 2014-10-28 10:46:46

+0

感谢您的提示,我发现可能的解决方案与系统()>和popen。如果我设法解决我的问题,我会更新。 – crabwalk 2014-10-28 10:50:14

回答

1
system("theExternalProgram >nul 2>nul"); 
+0

这看起来很有希望,并且还有不生成文件的好处。请问“2> nul”部分是做什么的? – crabwalk 2014-10-28 14:46:49

+0

@crabwalk'2> nul'重定向标准错误流。 – 2014-10-28 14:51:58

+0

感谢所有回复!该解决方案运行良好。 – crabwalk 2014-10-28 15:39:16