Reduce bashisms
[bcusdk.git] / eibd / libserver / threads.h
blob2c75f01e26f7ba2db93c66189aec402162b69d98
1 /*
2 EIBD eib bus access and management daemon
3 Copyright (C) 2005-2009 Martin Koegler <mkoegler@auto.tuwien.ac.at>
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 #ifndef THREADS_H
21 #define THREADS_H
23 #include <pthsem.h>
25 /** interface for a class started by a thread */
26 class Runable
28 public:
31 /** pointer to an thread entry point in Runable
32 * the thread should exit, if stopcond can be deceremented
34 typedef void (Runable::*THREADENTRY) (pth_sem_t * stopcond);
36 /** implements a Thread */
37 class Thread
39 /** delete at stop */
40 bool autodel;
41 /** C entry point for the threads */
42 static void *ThreadWrapper (void *arg);
43 /** thread id */
44 pth_t tid;
45 /** object to run */
46 Runable *obj;
47 /** entry point */
48 THREADENTRY entry;
49 /** stop condition */
50 pth_sem_t should_stop;
51 /** priority */
52 int prio;
54 protected:
55 /** main function of the thread
56 * @param stop if stop can be decemented, the routine should exit
58 virtual void Run (pth_sem_t * stop);
59 public:
60 /** create a thread
61 * if o and t are not present, Run is runned, which has to be replaced
62 * @param o Object to run
63 * @param t Entry point
65 Thread (int Priority = PTH_PRIO_STD, Runable * o = 0, THREADENTRY t = 0);
66 virtual ~ Thread ();
68 /** starts the thread*/
69 void Start ();
70 /** stops the thread, if it is running */
71 void Stop ();
72 /** stops the thread and delete it asynchronous */
73 void StopDelete ();
77 #endif