boost :: log (boost logging): BOOST_LOG_FUNCTION работает только в основном потоке

Рассмотрим следующую функцию:

void thread()
{
BOOST_LOG_FUNCTION();

while(true) {
// Create log entry
}
}

Если я просто вызываю «thread ()» внутри «main», мои записи в журнале, созданные в «thread ()», выглядят как ожидалось:

 [void __cdecl thread(void) (c:\...\maintest.cpp:16)]

Однако, если вы используете «thread ()» внутри функции:

 boost::thread t(thread);

соответствующая запись в журнале пуста:

[]

Как я могу это исправить?

1

Решение

Я получил отзыв от автора журнала буста. Чтобы область была доступна в процессе входа в систему, вы должны добавить «Scope» в качестве атрибута. Он сделал это:

logging::core::get()->add_thread_attribute("Scope", attrs::named_scope());

Однако это относится только к текущему потоку, как указано. Если вы используете несколько потоков, вы должны позвонить:

logging::core::get()->add_global_attribute("Scope", attrs::named_scope());
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]