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