Line data Source code
1 : /*
2 : Copyright (c) 2007-2016 Contributors as noted in the AUTHORS file
3 :
4 : This file is part of libzmq, the ZeroMQ core engine in C++.
5 :
6 : libzmq is free software; you can redistribute it and/or modify it under
7 : the terms of the GNU Lesser General Public License (LGPL) as published
8 : by the Free Software Foundation; either version 3 of the License, or
9 : (at your option) any later version.
10 :
11 : As a special exception, the Contributors give you permission to link
12 : this library with independent modules to produce an executable,
13 : regardless of the license terms of these independent modules, and to
14 : copy and distribute the resulting executable under terms of your choice,
15 : provided that you also meet, for each linked independent module, the
16 : terms and conditions of the license of that module. An independent
17 : module is a module which is not derived from or based on this library.
18 : If you modify this library, you must extend this exception to your
19 : version of the library.
20 :
21 : libzmq is distributed in the hope that it will be useful, but WITHOUT
22 : ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
23 : FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
24 : License for more details.
25 :
26 : You should have received a copy of the GNU Lesser General Public License
27 : along with this program. If not, see <http://www.gnu.org/licenses/>.
28 : */
29 :
30 : #ifndef __ZMQ_THREAD_HPP_INCLUDED__
31 : #define __ZMQ_THREAD_HPP_INCLUDED__
32 :
33 : #include "platform.hpp"
34 :
35 : #ifdef ZMQ_HAVE_WINDOWS
36 : #include "windows.hpp"
37 : #else
38 : #include <pthread.h>
39 : #endif
40 :
41 : namespace zmq
42 : {
43 :
44 : typedef void (thread_fn) (void*);
45 :
46 : // Class encapsulating OS thread. Thread initiation/termination is done
47 : // using special functions rather than in constructor/destructor so that
48 : // thread isn't created during object construction by accident, causing
49 : // newly created thread to access half-initialised object. Same applies
50 : // to the destruction process: Thread should be terminated before object
51 : // destruction begins, otherwise it can access half-destructed object.
52 :
53 : class thread_t
54 : {
55 : public:
56 :
57 : inline thread_t ()
58 : : tfn(NULL)
59 4470 : , arg(NULL)
60 : {
61 : }
62 :
63 : // Creates OS thread. 'tfn' is main thread function. It'll be passed
64 : // 'arg' as an argument.
65 : void start (thread_fn *tfn_, void *arg_);
66 :
67 : // Waits for thread termination.
68 : void stop ();
69 :
70 : // Sets the thread scheduling parameters. Only implemented for
71 : // pthread. Has no effect on other platforms.
72 : void setSchedulingParameters(int priority_, int schedulingPolicy_);
73 :
74 : // These are internal members. They should be private, however then
75 : // they would not be accessible from the main C routine of the thread.
76 : thread_fn *tfn;
77 : void *arg;
78 :
79 : private:
80 :
81 : #ifdef ZMQ_HAVE_WINDOWS
82 : HANDLE descriptor;
83 : #else
84 : pthread_t descriptor;
85 : #endif
86 :
87 : thread_t (const thread_t&);
88 : const thread_t &operator = (const thread_t&);
89 : };
90 :
91 : }
92 :
93 : #endif
|