Poco HTTPServer прерывается, если ведение журнала из потока началось с Poco / Timer - PullRequest
0 голосов
/ 18 декабря 2018

Если я настрою и запланирую 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 никогда не будет регистрироваться.


Q: Как я могу регистрировать сообщения (используя 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)
...