]> git.sesse.net Git - cubemap/blob - thread.h
Another include-what-you-use pass.
[cubemap] / thread.h
1 #ifndef _THREAD_H
2 #define _THREAD_H
3
4 #include <pthread.h>
5
6 // A rather generic thread class with start/stop functionality.
7 // NOTE: stop is somewhat racy (there's no guaranteed breakout from syscalls),
8 // since signals don't stick. We'll need to figure out something more
9 // intelligent later, probably based on sending a signal to an fd.
10
11 class Thread {
12 public:
13         virtual ~Thread();
14         void run();
15         void stop();
16
17 protected:
18         // Recovers the this pointer, and calls do_work().
19         static void *do_work_thunk(void *arg);
20
21         virtual void do_work() = 0;
22
23         volatile bool should_stop;
24
25 private:
26         pthread_t worker_thread;
27 };
28
29 #endif  // !defined(_THREAD_H)