mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-12 23:18:14 +01:00
LoopForever and ThreadTrace helpers
This commit is contained in:
56
src/util.h
56
src/util.h
@@ -527,4 +527,60 @@ inline uint32_t ByteReverse(uint32_t value)
|
||||
return (value<<16) | (value>>16);
|
||||
}
|
||||
|
||||
// Standard wrapper for do-something-forever thread functions.
|
||||
// "Forever" really means until the thread is interrupted.
|
||||
// Use it like:
|
||||
// new boost::thread(boost::bind(&LoopForever<void (*)()>, "dumpaddr", &DumpAddresses, 10000));
|
||||
// or maybe:
|
||||
// boost::function<void()> f = boost::bind(&FunctionWithArg, argument);
|
||||
// threadGroup.create_thread(boost::bind(&LoopForever<boost::function<void()> >, "nothing", f, milliseconds));
|
||||
template <typename Callable> void LoopForever(const char* name, Callable func, int64 msecs)
|
||||
{
|
||||
std::string s = strprintf("bitcoin-%s", name);
|
||||
RenameThread(s.c_str());
|
||||
printf("%s thread start\n", name);
|
||||
try
|
||||
{
|
||||
while (1)
|
||||
{
|
||||
func();
|
||||
MilliSleep(msecs);
|
||||
}
|
||||
}
|
||||
catch (boost::thread_interrupted)
|
||||
{
|
||||
printf("%s thread stop\n", name);
|
||||
throw;
|
||||
}
|
||||
catch (std::exception& e) {
|
||||
PrintException(&e, name);
|
||||
}
|
||||
catch (...) {
|
||||
PrintException(NULL, name);
|
||||
}
|
||||
}
|
||||
// .. and a wrapper that just calls func once
|
||||
template <typename Callable> void TraceThread(const char* name, Callable func)
|
||||
{
|
||||
std::string s = strprintf("bitcoin-%s", name);
|
||||
RenameThread(s.c_str());
|
||||
try
|
||||
{
|
||||
printf("%s thread start\n", name);
|
||||
func();
|
||||
printf("%s thread exit\n", name);
|
||||
}
|
||||
catch (boost::thread_interrupted)
|
||||
{
|
||||
printf("%s thread interrupt\n", name);
|
||||
throw;
|
||||
}
|
||||
catch (std::exception& e) {
|
||||
PrintException(&e, name);
|
||||
}
|
||||
catch (...) {
|
||||
PrintException(NULL, name);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user