14 #ifndef THREADSIMPLEMANAGER_H 15 #define THREADSIMPLEMANAGER_H 20 #ifdef THREAD_SIMPLE_IMPL 29 #ifdef HAVE_POSIX_THREADS 33 #ifndef WIN32_LEAN_AND_MEAN 34 #define WIN32_LEAN_AND_MEAN 1 40 class ThreadSimpleImpl;
55 class EXPCL_PANDA_PIPELINE ThreadSimpleManager {
57 ThreadSimpleManager();
60 void enqueue_ready(ThreadSimpleImpl *thread,
bool volunteer);
61 void enqueue_sleep(ThreadSimpleImpl *thread,
double seconds);
62 void enqueue_block(ThreadSimpleImpl *thread, BlockerSimple *blocker);
63 bool unblock_one(BlockerSimple *blocker);
64 bool unblock_all(BlockerSimple *blocker);
65 void enqueue_finished(ThreadSimpleImpl *thread);
66 void preempt(ThreadSimpleImpl *thread);
69 void prepare_for_exit();
71 INLINE ThreadSimpleImpl *get_current_thread();
72 void set_current_thread(ThreadSimpleImpl *current_thread);
73 INLINE
bool is_same_system_thread()
const;
74 void remove_thread(ThreadSimpleImpl *thread);
75 static void system_sleep(
double seconds);
76 static void system_yield();
78 double get_current_time()
const;
79 INLINE
static ThreadSimpleManager *get_global_ptr();
81 void write_status(std::ostream &out)
const;
84 static void init_pointers();
89 static void st_choose_next_context(
struct ThreadContext *from_context,
void *data);
90 void choose_next_context(
struct ThreadContext *from_context);
91 void do_timeslice_accounting(ThreadSimpleImpl *thread,
double now);
92 void wake_sleepers(Sleeping &sleepers,
double now);
93 void wake_all_sleepers(Sleeping &sleepers);
94 void report_deadlock();
95 double determine_timeslice(ThreadSimpleImpl *chosen_thread);
96 void kill_non_joinable(FifoThreads &threads);
97 void kill_non_joinable(Sleeping &threads);
100 class CompareStartTime {
102 INLINE
bool operator ()(ThreadSimpleImpl *a, ThreadSimpleImpl *b)
const;
117 ThreadSimpleImpl *
volatile _current_thread;
125 FifoThreads _next_ready;
139 Sleeping _volunteers;
142 FifoThreads _finished;
144 ThreadSimpleImpl *_waiting_for_exit;
152 unsigned int _tick_count;
153 ThreadSimpleImpl *_thread;
156 TickRecords _tick_records;
157 unsigned int _total_ticks;
159 static bool _pointers_initialized;
160 static ThreadSimpleManager *_global_ptr;
169 #endif // THREAD_SIMPLE_IMPL PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
This is our own Panda specialization on the default STL map.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
This is our own Panda specialization on the default STL deque.
This is our own Panda specialization on the default STL vector.
This is a convenience class to specialize ConfigVariable as a floating- point type.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
An interface to whatever real-time clock we might have available in the current environment.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
A thread; that is, a lightweight process.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.