如果我设置并安排Poco::Timer
Poco::Timer timer{ 0, 10000 /* ms */ };
MyTask task;
timer.start(Poco::TimerCallback<MyTask>(task, &MyTask::onTimer));
MyTask
在哪里
class MyTask
{
public:
Task() : logger { Poco::Logger::get("TaskLogger") } {}
void onTimer(Poco::Timer &timer)
{
this->logger.information("Logged");
}
private:
Poco::Logger &logger;
}
我在poco-libraries上构建的HTTPServer崩溃,并显示以下消息
Aborted
如果我从this->logger.information(...);
中删除了行MyTask::onTimer
,则服务器将正常执行。实际上,我应该用
std::cout << "Logged" << '\n';
我可以看到消息每10秒记录一次。
显然,我不允许其他线程使用Poco::Logger
。
MCVE ,而没有HTTPServer:
#include <iostream>
#include "Poco/Logger.h"
#include "Poco/Timer.h"
class MyTask
{
public:
Task() : logger { Poco::Logger::get("TaskLogger") } {}
void onTimer(Poco::Timer &timer)
{
this->logger.information("Logged");
}
private:
Poco::Logger &logger;
}
int main()
{
Poco::Timer timer {0, 5000};
MyTask task;
poco.start(Poco::TimerCallback<MyTask>(task, &MyTask::onTimer));
std::cin.get();
return 0;
}
Logger
将永远不会记录。
问::如何在其他线程中记录消息(使用Poco/Logger
)?
系统信息
POCO version
poco-1.9.0
Compiler and version
gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516
g++ (Debian 6.3.0-18+deb9u1) 6.3.0 20170516
Operating system and version
Debian GNU/Linux 9.6 (stretch)