如题,当有多个文件引入同一个命名空间时,命名空间内定义的变量会在每一次引入时都初始化嘛
问题由来:
我在调试程序的时候发现,本应该只初始化一次的变量初始化了两次。。
调试表现为输出两句初始化
这有悖我的程序意愿
程序文件列表
类文件
|--RRCSer.h
|--RRCSer.cpp
主程序文件:
|--main.cpp
程序的打印功能是使用一个我自定义的类CLogger来实现的,我将它定义于命名空间中
static CLogger s_logger;//全局静态日志器
问题:
我想要实现每次只有一个线程在打印消息,其他线程等待上一线程打印完毕再继续打印,我选择用互斥对象(定义为CLogger的成员变量)来实现这个功能。可调试过程中发现本应该只初始化一次的互斥对象,初始化了两次,实际调试窗口中,两个互斥对象的地址也不一样,导致主线程与子线程输出冲突(我暂时使用主线程先休眠一段时间的方法解决了这个问题)
问题输出:
进一步的调试,发现s_logger 对象被创建了两次,也就是说主线程与子线程用的两个互斥对象。。。导致两线程共同输出消息时的冲突。我的s_logger定义于RRCSer.h头文件里的命名空间中,并且这个命名空间被main.cpp和RRCSer.cpp引入,从而得出以上问题,再问问有什么推荐的方法可以解决这个问题
大致的代码如下(只提供出现问题的代码):
RRCSer.h:
namespace Ser
{
class CLogger
{
public:
CLogger();
~CTestCLogger();
private:
HANDLE m_mutex
};
static CLogger s_logger;
}
RRCSer.cpp
#include <RRCSer.h>
using namespace Ser;
CLogger::CLogger()
{
}
CLogger::~CLogger()
{
}
main.cpp
#include "RRCSer.cpp"
using namespace Ser;
int main()
{
return 0;
}