GNU Radio 3.6.1 C++ API
thread_body_wrapper.h
Go to the documentation of this file.
1 /* -*- c++ -*- */
2 /*
3  * Copyright 2008,2009 Free Software Foundation, Inc.
4  *
5  * This file is part of GNU Radio
6  *
7  * GNU Radio is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3, or (at your option)
10  * any later version.
11  *
12  * GNU Radio is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License along
18  * with this program; if not, write to the Free Software Foundation, Inc.,
19  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20  */
21 #ifndef INCLUDED_THREAD_BODY_WRAPPER_H
22 #define INCLUDED_THREAD_BODY_WRAPPER_H
23 
24 #include <gruel/api.h>
25 #include <gruel/thread.h>
26 #include <exception>
27 #include <iostream>
28 
29 namespace gruel
30 {
31 
32  GRUEL_API void mask_signals();
33 
34  template <class F>
36  {
37  F d_f;
38  std::string d_name;
39 
40  public:
41 
42  explicit thread_body_wrapper(F f, const std::string &name="")
43  : d_f(f), d_name(name) {}
44 
45  void operator()()
46  {
47  mask_signals();
48 
49  try {
50  d_f();
51  }
52  catch(boost::thread_interrupted const &)
53  {
54  }
55  catch(std::exception const &e)
56  {
57  std::cerr << "thread[" << d_name << "]: "
58  << e.what() << std::endl;
59  }
60  catch(...)
61  {
62  std::cerr << "thread[" << d_name << "]: "
63  << "caught unrecognized exception\n";
64  }
65  }
66  };
67 }
68 
69 #endif /* INCLUDED_THREAD_BODY_WRAPPER_H */