allow ffmpeg video to resample curr_pos, add bluray format
[goodguy/history.git] / cinelerra-5.0 / guicast / thread.h
1
2 /*
3  * CINELERRA
4  * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
5  * 
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  * 
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  * 
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  * 
20  */
21
22 #ifndef THREAD_H
23 #define THREAD_H
24
25 #include <stdio.h>
26 #include <pthread.h>
27 #include <unistd.h>
28 #include <sys/syscall.h>
29
30 static inline int gettid() { return syscall(SYS_gettid, 0, 0, 0); }
31
32 // The thread does not autodelete by default.
33 // If autodelete is 1 the thread autodeletes.
34 // If it's synchronous the deletion occurs in join().
35 // If it's asynchronous the deletion occurs in entrypoint.
36
37
38 class Thread
39 {
40 private:
41         static void* entrypoint(void *parameters);
42         bool exists();           // tid exists
43 protected:
44         virtual void run() = 0;
45 public:
46         Thread(int synchronous = 0, int realtime = 0, int autodelete = 0);
47         virtual ~Thread();
48         void start();
49         int cancel();            // end this thread
50         int join();              // join this thread
51         int suspend_thread();    // suspend this thread
52         int continue_thread();   // continue this thread
53         void exit_thread();      // exit this thread
54         int enable_cancel();
55         int disable_cancel();
56         int get_cancel_enabled();
57         bool running();          // exists and not finished
58         int get_synchronous();
59         int set_synchronous(int value);
60         int get_realtime();                 
61         int set_realtime(int value = 1);
62         int get_autodelete();
63         int set_autodelete(int value);
64 // Return realtime variable
65 // Return 1 if querying the kernel returned a realtime policy
66         static bool calculate_realtime();    
67         unsigned long get_tid();
68         static pthread_t get_self() { return pthread_self(); }
69         static void yield() { sched_yield(); }
70         static void dump_threads(FILE *fp=stdout);
71
72 private:
73         bool synchronous;        // force join() to end
74         bool realtime;           // schedule realtime
75         bool autodelete;         // autodelete when run() finishes
76         bool finished;
77         bool cancel_enabled, cancelled;
78         pthread_t owner, tid;
79 };
80
81 #endif