我在多线程环境中打印事件,控制台是所有线程共享的静态互斥锁。
当我得到的时间是当地时间而不是UTC时,问题是每隔一百或几千个事件。
我在Linux机器(使用g ++构建)中看到了这个错误,但在Windows(构建VC ++)中却没有。我不知道我可以从哪里开始,任何想法?
void Publish(std::string source, std::string topic, std::string msg) NOEXCEPT {
console.lock();
std::time_t now = std::chrono::high_resolution_clock::to_time_t(*localTime);
char buf[50];
strftime(buf, sizeof (buf), "%Y-%m-%dT%H:%M:%S+00:00", gmtime(&now));
cout << buf << " " << source << " " << topic << " " << msg << endl;
cout.flush();
console.unlock();
}
答案 0 :(得分:0)
struct tm * gmtime (const time_t * timer);
将time_t转换为tm作为UTC时间。此调用使用timer指向的值来填充tm结构,其中的值表示相应的时间,表示为UTC时间(即GMT时区的时间)。
这必须正常工作。 但是,不确定:
std::time_t now = std::chrono::high_resolution_clock::to_time_t(*localTime);
您的* localtime是否在多线程情况下准确提供当前时间?它是共享变量吗? 相反,您可以使用以下内容:
std::time_t now = time(0);