Commit 06fb5c7c authored by gabime's avatar gabime

Close issue #1113

parent 8970fd5d
...@@ -11,7 +11,8 @@ ...@@ -11,7 +11,8 @@
namespace spdlog { namespace spdlog {
namespace details { namespace details {
SPDLOG_INLINE thread_pool::thread_pool(size_t q_max_items, size_t threads_n)
SPDLOG_INLINE thread_pool::thread_pool(size_t q_max_items, size_t threads_n, std::function<void()> on_thread_start)
: q_(q_max_items) : q_(q_max_items)
{ {
if (threads_n == 0 || threads_n > 1000) if (threads_n == 0 || threads_n > 1000)
...@@ -21,10 +22,20 @@ SPDLOG_INLINE thread_pool::thread_pool(size_t q_max_items, size_t threads_n) ...@@ -21,10 +22,20 @@ SPDLOG_INLINE thread_pool::thread_pool(size_t q_max_items, size_t threads_n)
} }
for (size_t i = 0; i < threads_n; i++) for (size_t i = 0; i < threads_n; i++)
{ {
threads_.emplace_back(&thread_pool::worker_loop_, this); threads_.emplace_back([this, on_thread_start]
{
on_thread_start();
this->thread_pool::worker_loop_();
});
} }
} }
SPDLOG_INLINE thread_pool::thread_pool(size_t q_max_items, size_t threads_n):
thread_pool(q_max_items, threads_n, []{})
{
}
// message all threads to terminate gracefully join them // message all threads to terminate gracefully join them
SPDLOG_INLINE thread_pool::~thread_pool() SPDLOG_INLINE thread_pool::~thread_pool()
{ {
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <memory> #include <memory>
#include <thread> #include <thread>
#include <vector> #include <vector>
#include <functional>
namespace spdlog { namespace spdlog {
class async_logger; class async_logger;
...@@ -118,7 +119,9 @@ public: ...@@ -118,7 +119,9 @@ public:
using item_type = async_msg; using item_type = async_msg;
using q_type = details::mpmc_blocking_queue<item_type>; using q_type = details::mpmc_blocking_queue<item_type>;
thread_pool(size_t q_max_items, size_t threads_n, std::function<void()> on_thread_start);
thread_pool(size_t q_max_items, size_t threads_n); thread_pool(size_t q_max_items, size_t threads_n);
// message all threads to terminate gracefully join them // message all threads to terminate gracefully join them
~thread_pool(); ~thread_pool();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment