thread.cpp raw

   1  // Copyright (c) 2021-2022 The Limenka developers
   2  // Distributed under the MIT software license, see the accompanying
   3  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
   4  
   5  #include <util/thread.h>
   6  
   7  #include <logging.h>
   8  #include <util/exception.h>
   9  #include <util/threadnames.h>
  10  
  11  #include <exception>
  12  #include <functional>
  13  #include <string>
  14  #include <utility>
  15  
  16  void util::TraceThread(std::string_view thread_name, std::function<void()> thread_func)
  17  {
  18      util::ThreadRename(std::string{thread_name});
  19      try {
  20          LogPrintf("%s thread start\n", thread_name);
  21          thread_func();
  22          LogPrintf("%s thread exit\n", thread_name);
  23      } catch (const std::exception& e) {
  24          PrintExceptionContinue(&e, thread_name);
  25          throw;
  26      } catch (...) {
  27          PrintExceptionContinue(nullptr, thread_name);
  28          throw;
  29      }
  30  }
  31