如果从以Poco / Timer

时间:2018-12-18 10:28:53

标签: c++ logging debian poco-libraries

如果我设置并安排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;
}

我在上构建的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)

0 个答案:

没有答案