Boost.Log 비동기 싱크를 사용 중입니다 (Asynchronous sink frontend 참조). 적절한 종료를하려면 비동기 싱크대로의 레코드 공급을 정상적으로 중단하고 플러시해야합니다. 코어에는 싱크를 추가하거나 제거하는 방법이 있지만 클라이언트가 싱크대를 방문하거나 방문하는 방법이없는 것 같습니다. 문서는 stop_logging
방법,Boost.Log를 사용할 때 모든 비동기 싱크를 중지하는 방법
void stop_logging(boost::shared_ptr<sink_t>& sink)
{
boost::shared_ptr<logging::core> core = logging::core::get();
// Remove the sink from the core, so that no records are passed to it
core->remove_sink(sink);
// Break the feeding loop
sink->stop();
// Flush all log records that may have left buffered
sink->flush();
sink.reset();
}
을 가지고 있지만 특정 sink_t
형식을 사용합니다. asynchronous_sink frontend 클래스에는 싱크 백엔드 및 대기열 전략에 대한 템플릿 인수가 있습니다.
template<typename SinkBackendT,
typename QueueingStrategyT = unbounded_fifo_queue>
class asynchronous_sink;
내가 싱크의 여러 가지 종류가있다, 그래서 내가 그들을 보유하고 일반 컨테이너를하고 싶은, 그래서 그 위에 간단한 반복 할 수 및 각 stop_logging
전화는 컨테이너에 가라.
이것은 Boost.Log에서 제공되는 인터페이스로 인해 해결해야 할 C++ 템플릿 데이터 구조에 대한 일반적인 질문입니다. Boost.Log 코어에 추가 한 비동기 싱크를 추적하는 데 사용할 좋은 데이터 구조는 무엇입니까? 종료시 stop_logging
으로 전화 할 수 있도록 전화가 필요합니다.
내 첫 번째 간단한 방법은 boost::any
개의 벡터를 사용하는 것입니다. 그러나 그것은 다소 성 가시고 우아하지 않습니다. 난 합리적인 접근 방식은 λ 메서드가 stop_logging
호출하는 함수 개체의 벡터를 가질 것이라고 생각합니다. 그러나 나는 템플릿 유형에서 길을 잃었고 이것을 수행하는 방법을 모른다.
감사합니다. 감사합니다.