Imported Upstream version 3.2.2
[debian/gnuradio] / gruel / src / include / gruel / thread_body_wrapper.h
1 /* -*- c++ -*- */
2 /*
3  * Copyright 2008 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 <boost/thread.hpp>
25 #include <exception>
26 #include <iostream>
27
28 namespace gruel 
29 {
30
31   void mask_signals();
32
33   template <class F>
34   class thread_body_wrapper
35   {
36     F           d_f;
37     std::string d_name;
38
39   public:
40
41     explicit thread_body_wrapper(F f, const std::string &name="")
42       : d_f(f), d_name(name) {}
43
44     void operator()()
45     {
46       mask_signals();
47
48       try {
49         d_f();
50       }
51       catch(boost::thread_interrupted const &)
52       {
53       }
54       catch(std::exception const &e)
55       {
56         std::cerr << "thread[" << d_name << "]: "
57                   << e.what() << std::endl;
58       }
59       catch(...)
60       {
61         std::cerr << "thread[" << d_name << "]: "
62                   << "caught unrecognized exception\n";
63       }
64     }
65   };
66 }
67
68 #endif /* INCLUDED_THREAD_BODY_WRAPPER_H */