Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Class template asynchronous_sink

Boost , Chapter 1. Boost.Log v2 , Sinks

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Class template asynchronous_sink

boost::log::sinks::asynchronous_sink — Asynchronous logging sink frontend.

Synopsis

// In header: <boost/log/sinks/async_frontend.hpp>
template<typename SinkBackendT, 
         typename QueueingStrategyT = unbounded_fifo_queue> 
class asynchronous_sink :
  public basic_sink_frontend, public QueueingStrategyT
{
public:
  // types
  typedef SinkBackendT           sink_backend_type;   // Sink implementation type. 
  typedef implementation_defined locked_backend_ptr;  // A pointer type that locks the backend until it's destroyed. 
  // member classes/structs/unions
  // A scope guard that resets a flag on destructor.
  class scoped_flag {
  public:
    // construct/copy/destruct
    explicit scoped_flag(frontend_mutex_type &, condition_variable_any &, 
                         boost::atomic< bool > &);
    scoped_flag(scoped_flag const &) = delete;
    scoped_flag & operator=(scoped_flag const &) = delete;
    ~scoped_flag();
  };
  // A scope guard that implements thread ID management.
  class scoped_thread_id {
  public:
    // construct/copy/destruct
    scoped_thread_id(frontend_mutex_type &, condition_variable_any &, 
                     thread::id &, boost::atomic< bool > &);
    scoped_thread_id(unique_lock< frontend_mutex_type > &, 
                     condition_variable_any &, thread::id &, 
                     boost::atomic< bool > &);
    scoped_thread_id(scoped_thread_id const &) = delete;
    scoped_thread_id & operator=(scoped_thread_id const &) = delete;
    ~scoped_thread_id();
  };
  // construct/copy/destruct
  asynchronous_sink(bool = true);
  explicit asynchronous_sink(shared_ptr< sink_backend_type > const &, 
                             bool = true);
  template<typename... Args> explicit asynchronous_sink(Args &&...);
  ~asynchronous_sink();
  // public member functions
  locked_backend_ptr locked_backend();
  virtual void consume(record_view const &);
  virtual bool try_consume(record_view const &);
  void run();
  void stop();
  void feed_records();
  virtual void flush();
};

Description

Фронтенд начинает отдельную нить на строительстве. Все записи журналирования передаются на бэкэнд только в этой выделенной нити.

asynchronous_sink public construct/copy/destruct

  1. <
    asynchronous_sink(boolstart_thread=true);
    >

    Конструктор по умолчанию. Построение корпуса раковины. Требует, чтобы бэкэнд был конструктивным по умолчанию.

  2. explicit asynchronous_sink(shared_ptr< sink_backend_type > const & backend, 
                               bool start_thread = true);

    Constructor attaches user-constructed backend instance

  3. Параметры:

    <start_thread>

    Если<true>, фронтенд создает нить для подачи записей журнала на бэкэнд. В противном случае нить не запускается и предполагается, что пользователь вызовет либо<run>, либо<feed_records>себя.

    Parameters:

    backend

    Pointer to the backend instance.

    start_thread

    If true, the frontend creates a thread to feed log records to the backend. Otherwise no thread is started and it is assumed that the user will call either run or feed_records himself.

    Требуется:

    backend is not NULL.

  4. <
    template<typename...Args>explicitasynchronous_sink(Args&&...args);
    >

    Конструктор, который передает произвольные именованные параметры конструатору межпроцессного опускания. Обратитесь к справочной документации для списка поддерживаемых параметров.

    Фронтенд использует следующие названные параметры:

    • start_thread — Если<true>, фронтенд создает поток для подачи записей журнала на бэкэнд. В противном случае нить не запускается, и предполагается, что пользователь позвонит либо<run>, либо<feed_records>сам.

  5. <
    ~asynchronous_sink();
    >

    Разрушитель. Неявно останавливает выделенную нить питания, если она запущена.

asynchronous_sink public member functions

  1. <
    locked_backend_ptrlocked_backend();
    >

    Запирающий аксессуар на прикрепленном бэкэнде

  2. <
    virtualvoidconsume(record_viewconst&rec);
    >

    Очередь записи журнала на бэкэнд

  3. <
    virtualbooltry_consume(record_viewconst&rec);
    >

    Метод пытается передать запись журнала на бэкэнд

  4. <
    voidrun();
    >

    Метод запускает цикл подачи записи и эффективно блокирует до тех пор, пока не произойдет любое из этих событий:

    • нить прерывается из-за либо стандартного прерывания нити, либо вызова<stop>

      .
    • Исключение выбрасывается при обработке записи журнала в бэкэнде, и исключение не прекращается обработчиком исключения, если оно установлено

      .

    Требуется:

    Фронт раковины должен быть построен без нереста выделенной нити

  5. <
    voidstop();
    >

    Метод мягко прерывает цикл подачи записи. Этот метод должен быть назван, когда выполнение метода<run>должно быть прервано. В отличие от обычного прерывания потока, вызов<stop>не прерывает обработку записи в середине. Вместо этого фронтенд раковины попытается завершить свой бизнес с записью в процессе и вернуться после этого. Этот способ можно назвать либо если раковина была создана выделенной нитью, либо если цикл подачи был инициирован пользователем.

    [Note]Примечание

    Возвращение с этого метода не гарантирует, что в фронтенде раковины не осталось никаких записей. Вполне возможно, что записи журналов продолжают поступать во время и после того, как этот метод называется. В какой-то момент выполнения этого метода записи журнала перестают обрабатываться, и все записи, которые приходят после этого момента, помещаются в очередь. Эти записи будут обрабатываться при дальнейших звонках<run>или<feed_records>.

  6. void feed_records();

    The method feeds log records that may have been buffered to the backend and returns

    Требуется:

    Фронт раковины должен быть построен без нереста выделенной нити

  7. <
    virtualvoidflush();
    >

    Метод подает все записи журнала, которые, возможно, были буферизованы на бэкэнд и возвраты. В отличие от<feed_records>, в случае заказа очередей способ также подает записи, которые были поставлены в очередь во время окна заказа, пытаясь полностью опорожнить очередь.


PrevUpHomeNext

Статья Class template asynchronous_sink раздела Chapter 1. Boost.Log v2 Sinks может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Sinks ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 07:24:54/0.004702091217041/0