Panda3D
Loading...
Searching...
No Matches
threadPosixImpl.I
Go to the documentation of this file.
1/**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file threadPosixImpl.I
10 * @author drose
11 * @date 2006-02-09
12 */
13
14/**
15 *
16 */
17INLINE ThreadPosixImpl::
18ThreadPosixImpl(Thread *parent_obj) :
19 _parent_obj(parent_obj)
20{
21 _joinable = false;
22 _detached = false;
23 _status = S_new;
24#ifdef ANDROID
25 _jni_env = nullptr;
26#endif
27}
28
29/**
30 *
31 */
32INLINE void ThreadPosixImpl::
33preempt() {
34}
35
36/**
37 *
38 */
39INLINE void ThreadPosixImpl::
40prepare_for_exit() {
41}
42
43/**
44 *
45 */
46INLINE Thread *ThreadPosixImpl::
47get_current_thread() {
48 TAU_PROFILE("Thread *ThreadPosixImpl::get_current_thread()", " ", TAU_USER);
49 if (!_got_pt_ptr_index) {
50 init_pt_ptr_index();
51 }
52 return (Thread *)pthread_getspecific(_pt_ptr_index);
53}
54
55/**
56 * Associates the indicated Thread object with the currently-executing thread.
57 * You should not call this directly; use Thread::bind_thread() instead.
58 */
59INLINE void ThreadPosixImpl::
60bind_thread(Thread *thread) {
61 if (!_got_pt_ptr_index) {
62 init_pt_ptr_index();
63 }
64 int result = pthread_setspecific(_pt_ptr_index, thread);
65 nassertv(result == 0);
66#ifdef ANDROID
67 bind_java_thread();
68#endif
69}
70
71/**
72 *
73 */
74INLINE bool ThreadPosixImpl::
75is_threading_supported() {
76 return true;
77}
78
79/**
80 *
81 */
82INLINE bool ThreadPosixImpl::
83is_true_threads() {
84 return true;
85}
86
87/**
88 *
89 */
90INLINE bool ThreadPosixImpl::
91is_simple_threads() {
92 return false;
93}
94
95/**
96 *
97 */
98INLINE void ThreadPosixImpl::
99sleep(double seconds) {
100 TAU_PROFILE("void ThreadPosixImpl::sleep(double)", " ", TAU_USER);
101 struct timespec rqtp;
102 rqtp.tv_sec = time_t(seconds);
103 rqtp.tv_nsec = long((seconds - (double)rqtp.tv_sec) * 1000000000.0);
104 nanosleep(&rqtp, nullptr);
105}
106
107/**
108 *
109 */
110INLINE void ThreadPosixImpl::
111yield() {
112 sleep(0.0);
113}
114
115/**
116 *
117 */
118INLINE void ThreadPosixImpl::
119consider_yield() {
120}
121
122#ifdef ANDROID
123/**
124 * Returns the JNIEnv object for the current thread.
125 */
126INLINE JNIEnv *ThreadPosixImpl::
127get_jni_env() const {
128 return _jni_env;
129}
130#endif
A thread; that is, a lightweight process.
Definition thread.h:46