如何在C 中自动汇总日志消息并自动解锁互斥X
How to flush a log message and unlock a mutex automatically in C++?
我写了这个记录器。它可以正常工作,但是我无法做任何事情。
uLOG(warning) << "Test log message " << 123 << uLOGE;
ulog锁定c 11 mutex并开始在文件流上写作。
Uloge冲洗溪流并解锁静音。
我想通过此语法获得相同的结果:
uLOG(warning) << "Test log message " << 123;
所以我希望齐平和解锁在生产线末端自动称为。
哪种可能的方法?
- 我尝试设置
ios::unitbuf
标志,但这迫使每个<<
操作员都齐平,这并不是SSD佩戴的理想选择。而且它没有解锁哑光。 - 我尝试在ulog中定义一个临时对象,其驱动器会冲洗并解锁,但这将日志线放在其自己的代码块中:
{ uLOG(warning) << 123; }
参考
您需要重新设计记录框架,以便您实例化的uLOG
是A class ,并且其destuructor可以完成uLOGE
宏的工作。
非常简单的示例:
struct uLOG
{
uLOG(std::string const& type)
{
std::cout << "Log: " << type << " - ";
}
template<typename T>
uLOG& operator<<(T const& output)
{
std::cout << output;
return *this;
}
~uLOG()
{
std::cout << " (end of log)" << std::endl;
}
};
// ...
uLOG("warning") << "log message" << 123;
以上,在合适的程序中应打印
日志:警告 - 日志消息123(日志结束)
此解决方案不需要使用牙套,因此可以在单键式的未支撑if
或环中使用。
您的第二种方法是正确的,如果正确实现,则不需要括号。你是用宏做的吗?这里不需要它们。
ulog应该是返回日志作者类的临时对象的函数。正如您概述的那样,它应该锁定CTOR,齐平和DTOR中解锁,并具有模板操作员&lt;&lt;对于所有类型的类型,只需将呼叫转发到实际日志目的地。
相关文章:
- 我应该在锁定TBitmap画布后解锁它吗
- 虚假唤醒是否会解锁所有等待线程,甚至是不相关的线程?
- c++ 为什么我不应该从不同的线程解锁互斥锁
- 在新作用域中使用unique_lock是否等效于在使用共享资源的工作结束时解锁调用
- "data race"(不是真的)在通知条件变量并解锁关联的互斥锁后
- 程序输入密码并解锁窗口7,8,10
- 在通知之前完成手动解锁
- STD :: Mutex如何在不同的线程中解锁
- 如何使用单个解锁方法(可称为读取器或写入器)实现C++读写器锁?
- 如何在C 中自动汇总日志消息并自动解锁互斥X
- 如果我们已经手动解锁了unique_lock,那么破坏时会解锁吗?
- 正在解锁手动未定义/不良设计的锁定guard
- 从C 运行代码后解锁绑定(在R中)的问题
- 在功能返回之前,可以解锁Mutex会增加并发
- 当互斥锁解锁时,它会notify_all或notify_one
- 如何确保在C ++中解锁储物柜?哪种解决方案更好
- 我应该如何在一个功能中锁定wxMutex,并在另一个功能中将其解锁
- mutex::lock() 检查一次解锁状态是否已经被另一个线程锁定?
- 在Qt 5.4中可以对互斥对象进行两次解锁吗
- C++线程:等待condition_variable后无法解锁阵列中的互斥锁