多线程记录器 我试图用Boost创建一个多线程C++代码记录器。这是我的密码: class logger { private: boost::mutex logMtx; public: logger() { } ~l

多线程记录器 我试图用Boost创建一个多线程C++代码记录器。这是我的密码: class logger { private: boost::mutex logMtx; public: logger() { } ~l,c++,multithreading,boost-thread,C++,Multithreading,Boost Thread,多线程记录器 我试图用Boost创建一个多线程C++代码记录器。这是我的密码: class logger { private: boost::mutex logMtx; public: logger() { } ~logger() { } void logString(string z) { boost::mutex::scoped_lock lock(logMtx); std::cout&l

多线程记录器 我试图用Boost创建一个多线程C++代码记录器。这是我的密码:

class logger
{
private:
    boost::mutex logMtx;
public:
    logger()
    {
    }
    ~logger()
    {
    }
    void logString(string z)
    {
        boost::mutex::scoped_lock lock(logMtx);
        std::cout<<z<<std::endl;
        std::cout.flush();      
    }
};
类记录器
{
私人:
boost::互斥logMtx;
公众:
记录器()
{
}
~logger()
{
}
无效日志字符串(字符串z)
{
boost::mutex::作用域锁定(logMtx);

std::coutIs有可能写入
stdout
的任何其他代码吗?@marko,
logger
已经不可复制,因为
boost::mutex
不可复制。简单的“锁定,写入”“解锁”设计会造成任何输出流延迟(磁盘/网络/任何东西),发送到所有调用者。这会导致延迟,这通常是不可接受的。将日志输出排队到一个专用记录器线程通常是更好的解决方案。请注意,刷新它两次:
std::endl
进行刷新,以及
.flush()
。请忽略此问题。此问题不是由于兵变导致的,而是一些数据损坏。我方对此表示歉意