为什么按系统更改C ++控制台应用程序中的颜色(“color YX”)不是最好的解决方案?

时间:2012-01-30 02:19:49

标签: c++ windows console

我在某个地方读过(知道两种方式只适用于Windows),使用系统并不是最佳解决方案。

为什么

#include<windows.h>
...
HANDLE hOut;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hOut,BACKGROUND_RED);

更好?

据我所知,该系统(“color YX”)改变整个控制台的颜色。但是我想,有一种方法可以通过在打印文本期间“打开和关闭”某些颜色来实现。

系统(命令)在与系统/控制台通信期间是否会使用附加层,是否可以避免使用第二种方法?

我还有其他原因可以使用第二种方法吗?

2 个答案:

答案 0 :(得分:2)

  

我还有其他原因可以使用第二种方法吗?

system(command)将在任何系统上编译,无论'命令'是什么。使用Windows函数可确保您的代码仅在其实际工作的系统上进行编译。如果您想要移植此代码,您将获得清晰的编译器错误,因此您将花费更少的时间来跟踪代码无法工作的原因。

答案 1 :(得分:1)

优化方面,系统(命令)调用创建一个单独的进程,传递参数“color XY”,然后该进程搜索命令“color”并执行它。

请注意,由于color是一个控制台内部命令,因此它的执行非常紧迫。但是,对于非内部命令,它将创建另一个进程并在该单独进程中执行该命令。

这意味着创建2个非常慢的进程(每个进程2Mb,完整的进程信息,如IP地址,寄存器,stdin / stdout / stderr,......)