c++ - cpp 建议在没有开销/io 调用的情况下进入静音状态的更好方法

标签 c++ daemon cout

我们有可以在 silence mode 运行的守护进程和 print mode (打印到 std::cout)。如何制作silence没有开销和 io 调用。建议更多更好的方法!或者写什么方法比较好! (优点/缺点)

例如:

1 种方式:

简单的地方在代码std::cout << "blah-blah-blah: " << var << std::endl; 什么时候需要沉默close(STDOUT_FILENO)或将 cout 重写为 dev/null (如何?)

2 路

使用 global bool FLAG_SILENCE并在每次 cout 调用之前检查它:if (!FLAG_SILENCE) std::cout << "blah-blah-blah: " << var << std::endl;

3 路 预定义宏 #define SILENTCOUT std::cout什么时候需要沉默#define SILENTCOUT SOMETHING (something = some function that have operator << and without overhard (does not know how to realise, seems need to define our own function with defined <<` that do nothing )

4 路 预定义宏 #define SILENTCOUT(x) std::cout << x << std::endl使用 SILENTCOUT( "mess" ) -- 危险,非常丑陋

最佳答案

一个常见的解决方案是提供包含 if 的宏。和实际打印:

#define LOG( msg )                 \
    if ( !log_enabled ) {} else    \
        std::cout << msg;

虽然一般来说宏有点复杂(例如,不是测试 log_enabled 而是采用日志级别,将其与预定义级别进行比较并相应地记录)。

一些库使用宏选项返回一个实现了operator<<的记录器对象。并且根据配置将提供适当的记录器或仅忽略参数的无操作接收器。这可能会稍微降低性能,因为这至少需要函数调用 operator<< .

无论如何,我建议您使用日志记录库,因为这些问题已经多次 解决了。

关于c++ - cpp 建议在没有开销/io 调用的情况下进入静音状态的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10959573/

相关文章:

c++ - cout 在终端中不显示任何内容

时间:2019-03-09 标签:c++iomaniptableformatting

c++ - extern "C"函数是单独的类型吗?

c++ - 构造函数中的虚方法

html - 下载的页面源与呈现的页面源不同

ruby - 为什么 Process.setsid 在 ruby​​ 中需要 root 权限?

在 Linux 中创建守护进程

c++ - 将元素插入排序 vector

php - System_Daemon 无法打开流/var/log/mydaemonname.log

c++ - cout 的缓冲区如何工作?