Add thread unregistering in log
This commit is contained in:
parent
2f56f0caa2
commit
9cba2d1c16
3 changed files with 45 additions and 2 deletions
|
|
@ -21,9 +21,9 @@ namespace psemek::async
|
||||||
for (std::size_t th = 0; th < thread_count; ++th)
|
for (std::size_t th = 0; th < thread_count; ++th)
|
||||||
{
|
{
|
||||||
std::string tname = thread_count == 1 ? name : util::to_string(name, '#', th);
|
std::string tname = thread_count == 1 ? name : util::to_string(name, '#', th);
|
||||||
threads_.emplace_back([this, tname = std::move(tname)]
|
threads_.emplace_back([this, tname = std::move(tname)]() mutable
|
||||||
{
|
{
|
||||||
log::register_thread(tname);
|
log::thread_registrator reg(std::move(tname));
|
||||||
for (bool running = true; running;)
|
for (bool running = true; running;)
|
||||||
{
|
{
|
||||||
auto task = task_queue_.pop();
|
auto task = task_queue_.pop();
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,28 @@ namespace psemek::log
|
||||||
|
|
||||||
void register_thread(std::string name);
|
void register_thread(std::string name);
|
||||||
void register_thread(std::thread::id id, std::string name);
|
void register_thread(std::thread::id id, std::string name);
|
||||||
|
void unregister_thread(std::thread::id id);
|
||||||
|
|
||||||
|
struct [[maybe_unused]] thread_registrator
|
||||||
|
{
|
||||||
|
thread_registrator(std::string name, std::thread::id id)
|
||||||
|
: id_{id}
|
||||||
|
{
|
||||||
|
register_thread(id_, std::move(name));
|
||||||
|
}
|
||||||
|
|
||||||
|
thread_registrator(std::string name)
|
||||||
|
: thread_registrator(std::move(name), std::this_thread::get_id())
|
||||||
|
{}
|
||||||
|
|
||||||
|
~thread_registrator()
|
||||||
|
{
|
||||||
|
unregister_thread(id_);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::thread::id id_;
|
||||||
|
};
|
||||||
|
|
||||||
void put_message(level l, std::string const & message);
|
void put_message(level l, std::string const & message);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,27 @@ namespace psemek::log
|
||||||
put_message(level::info, "Thread \"" + name + "\" registered");
|
put_message(level::info, "Thread \"" + name + "\" registered");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void unregister_thread(std::thread::id id)
|
||||||
|
{
|
||||||
|
std::string name;
|
||||||
|
{
|
||||||
|
std::lock_guard lock{thread_names_mutex};
|
||||||
|
|
||||||
|
auto it = thread_names.find(id);
|
||||||
|
if (it == thread_names.end())
|
||||||
|
{
|
||||||
|
std::ostringstream os;
|
||||||
|
os << "Thread " << id << " not found!";
|
||||||
|
throw std::runtime_error(os.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
name = it->second;
|
||||||
|
thread_names.erase(it);
|
||||||
|
}
|
||||||
|
|
||||||
|
put_message(level::info, "Thread \"" + name + "\" unregistered");
|
||||||
|
}
|
||||||
|
|
||||||
static ::tm safe_localtime(std::time_t const & time)
|
static ::tm safe_localtime(std::time_t const & time)
|
||||||
{
|
{
|
||||||
static std::mutex mutex;
|
static std::mutex mutex;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue