所以我开始写一个游戏,我想要一个不同线程的记录器。我的方法是:有一个“Logger”类,在构造函数中运行一个线程,在线程中有一个循环运行,它不断检查字符串流中的数据。该字符串流是一个静态变量,所以我在程序的入口点运行记录器,然后每当我需要记录某些内容时,我调用一个静态方法写入静态字符串流,该方法每 100 毫秒读取一次线。所以我想知道这种方法在游戏编程中是否可行,如果它有点好,我应该如何处理?
试过这个,它失败了(不知何故在睡眠(100)之后抛出一个未处理的异常,而不是继续循环......)
class Logger
{
private:
ofstream out;
string fileName;
thread T;
bool running;
static stringstream sstream;
void run();
public:
Logger();
~Logger();
void stop();
static void log(string msg);
void join();
};
stringstream Logger::sstream;
Logger::Logger()
{
fileName = "log.txt";
out = ofstream(fileName);
if (!out.is_open())
{
PostQuitMessage(3);
}
running = false;
T = thread(&Logger::run, this);
}
Logger::~Logger()
{
out.close();
}
void Logger::run()
{
running = true;
while (running)
{
if (!sstream.str().empty())
{
out << sstream.str();
sstream.clear();
}
Sleep(100);
}
}
void Logger::stop()
{
running = false;
}
void Logger::log(string msg)
{
Logger::sstream << "lel" << endl;
}
void Logger::join()
{
T.join();
}