9 #include "quill/backend/BackendOptions.h" 10 #include "quill/backend/BackendWorker.h" 23 : _backend_worker(backend_worker)
31 _backend_worker->_exit();
47 _backend_worker->_init(options);
63 "ManualBackendWorker::poll_one() requires init() to be called first with sleep_duration = 0");
65 "ManualBackendWorker::poll_one() requires init() to be called first with " 66 "enable_yield_when_idle = false");
67 QUILL_ASSERT(_backend_worker->_worker_thread_id.load() != 0,
68 "ManualBackendWorker::poll_one() requires init() to be called first");
70 "ManualBackendWorker::poll_one() must always be called from the same thread");
72 QUILL_TRY { _backend_worker->_poll(); }
73 #if !defined(QUILL_NO_EXCEPTIONS) 74 QUILL_CATCH(std::exception
const& e) { _backend_worker->_options.
error_notifier(e.what()); }
77 _backend_worker->_options.
error_notifier(std::string{
"Caught unhandled exception."});
89 while (!_backend_worker->_check_frontend_queues_and_cached_transit_events_empty())
99 void poll(std::chrono::microseconds timeout)
101 auto const start = std::chrono::steady_clock::now();
102 while (!_backend_worker->_check_frontend_queues_and_cached_transit_events_empty())
106 auto const now = std::chrono::steady_clock::now();
108 if ((now - start) > timeout)
117 bool _started{
false};
bool enable_yield_when_idle
The backend employs "busy-waiting" by spinning around each frontend thread's queue.
Definition: BackendOptions.h:44
void poll(std::chrono::microseconds timeout)
This function behaves like poll() but will stop polling if the specified timeout duration is reached ...
Definition: ManualBackendWorker.h:99
std::function< void(std::string const &)> error_notifier
The backend may encounter exceptions that cannot be caught within user threads.
Definition: BackendOptions.h:170
void init(BackendOptions options)
Initializes the ManualBackendWorker with the specified backend options.
Definition: ManualBackendWorker.h:43
std::chrono::nanoseconds sleep_duration
Specifies the duration the backend sleeps if there is no remaining work to process in the queues...
Definition: BackendOptions.h:49
This class can be used when you want to run the backend worker on your own thread.
Definition: ManualBackendWorker.h:19
void poll()
Continuously polls the backend worker until all queues are empty.
Definition: ManualBackendWorker.h:87
void poll_one()
Polls all thread-local SPSC queues and caches the log statements, processing and writing the log stat...
Definition: ManualBackendWorker.h:59
Definition: BackendWorker.h:77
QUILL_NODISCARD QUILL_EXPORT QUILL_ATTRIBUTE_USED uint32_t get_thread_id() noexcept
Returns the os assigned ID of the thread.
Definition: ThreadUtilities.h:198
Configuration options for the backend.
Definition: BackendOptions.h:30