mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-27 15:25:54 -04:00
parent
384a0d1238
commit
6bbba133f0
@ -92,16 +92,19 @@ Thread::
|
||||
*/
|
||||
PT(Thread) Thread::
|
||||
bind_thread(const std::string &name, const std::string &sync_name) {
|
||||
Thread *current_thread = get_current_thread();
|
||||
if (current_thread != get_external_thread()) {
|
||||
PT(Thread) thread = new ExternalThread(name, sync_name);
|
||||
#ifndef HAVE_THREADS
|
||||
Thread *current_thread = get_main_thread();
|
||||
#else
|
||||
Thread *current_thread = ThreadImpl::bind_thread(thread);
|
||||
#endif
|
||||
if (current_thread != nullptr &&
|
||||
current_thread != thread.p()) {
|
||||
// This thread already has an associated thread.
|
||||
nassertr(current_thread->get_name() == name &&
|
||||
current_thread->get_sync_name() == sync_name, current_thread);
|
||||
return current_thread;
|
||||
thread = current_thread;
|
||||
}
|
||||
|
||||
PT(Thread) thread = new ExternalThread(name, sync_name);
|
||||
ThreadImpl::bind_thread(thread);
|
||||
return thread;
|
||||
}
|
||||
|
||||
|
@ -63,13 +63,15 @@ prepare_for_exit() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Associates the indicated Thread object with the currently-executing thread.
|
||||
* Associates the indicated Thread object with the currently-executing thread,
|
||||
* unless a thread is already bound, in which case it is returned.
|
||||
* You should not call this directly; use Thread::bind_thread() instead.
|
||||
*/
|
||||
INLINE void ThreadDummyImpl::
|
||||
INLINE Thread *ThreadDummyImpl::
|
||||
bind_thread(Thread *thread) {
|
||||
// This method shouldn't be called in the non-threaded case.
|
||||
nassertv(false);
|
||||
nassertr(false, nullptr);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -55,7 +55,7 @@ public:
|
||||
INLINE static void prepare_for_exit();
|
||||
|
||||
static Thread *get_current_thread();
|
||||
INLINE static void bind_thread(Thread *thread);
|
||||
INLINE static Thread *bind_thread(Thread *thread);
|
||||
INLINE static bool is_threading_supported();
|
||||
INLINE static bool is_true_threads();
|
||||
INLINE static bool is_simple_threads();
|
||||
|
@ -193,18 +193,23 @@ get_unique_id() const {
|
||||
}
|
||||
|
||||
/**
|
||||
* Associates the indicated Thread object with the currently-executing thread.
|
||||
* Associates the indicated Thread object with the currently-executing thread,
|
||||
* unless a thread is already bound, in which case it is returned.
|
||||
* You should not call this directly; use Thread::bind_thread() instead.
|
||||
*/
|
||||
void ThreadPosixImpl::
|
||||
Thread *ThreadPosixImpl::
|
||||
bind_thread(Thread *thread) {
|
||||
if (_current_thread == nullptr && thread == Thread::get_main_thread()) {
|
||||
if (_current_thread != nullptr) {
|
||||
return _current_thread;
|
||||
}
|
||||
if (thread == Thread::get_main_thread()) {
|
||||
_main_thread_known.test_and_set(std::memory_order_relaxed);
|
||||
}
|
||||
_current_thread = thread;
|
||||
#ifdef ANDROID
|
||||
bind_java_thread();
|
||||
#endif
|
||||
return thread;
|
||||
}
|
||||
|
||||
#ifdef ANDROID
|
||||
|
@ -49,7 +49,7 @@ public:
|
||||
INLINE static void prepare_for_exit();
|
||||
|
||||
INLINE static Thread *get_current_thread();
|
||||
static void bind_thread(Thread *thread);
|
||||
static Thread *bind_thread(Thread *thread);
|
||||
INLINE static bool is_threading_supported();
|
||||
INLINE static bool is_true_threads();
|
||||
INLINE static bool is_simple_threads();
|
||||
|
@ -36,11 +36,13 @@ is_same_system_thread() const {
|
||||
}
|
||||
|
||||
/**
|
||||
* Associates the indicated Thread object with the currently-executing thread.
|
||||
* Associates the indicated Thread object with the currently-executing thread,
|
||||
* unless a thread is already bound, in which case it is returned.
|
||||
* You should not call this directly; use Thread::bind_thread() instead.
|
||||
*/
|
||||
INLINE void ThreadSimpleImpl::
|
||||
INLINE Thread *ThreadSimpleImpl::
|
||||
bind_thread(Thread *) {
|
||||
return get_current_thread();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -61,7 +61,7 @@ public:
|
||||
INLINE static Thread *get_current_thread();
|
||||
INLINE bool is_same_system_thread() const;
|
||||
|
||||
INLINE static void bind_thread(Thread *thread);
|
||||
INLINE static Thread *bind_thread(Thread *thread);
|
||||
INLINE static bool is_threading_supported();
|
||||
static bool is_true_threads();
|
||||
INLINE static bool is_simple_threads();
|
||||
|
@ -184,15 +184,20 @@ get_current_thread() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Associates the indicated Thread object with the currently-executing thread.
|
||||
* Associates the indicated Thread object with the currently-executing thread,
|
||||
* unless a thread is already bound, in which case it is returned.
|
||||
* You should not call this directly; use Thread::bind_thread() instead.
|
||||
*/
|
||||
void ThreadWin32Impl::
|
||||
Thread *ThreadWin32Impl::
|
||||
bind_thread(Thread *thread) {
|
||||
if (_current_thread == nullptr && thread == Thread::get_main_thread()) {
|
||||
if (_current_thread != nullptr) {
|
||||
return _current_thread;
|
||||
}
|
||||
if (thread == Thread::get_main_thread()) {
|
||||
_main_thread_known.test_and_set(std::memory_order_relaxed);
|
||||
}
|
||||
_current_thread = thread;
|
||||
return thread;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -44,7 +44,7 @@ public:
|
||||
INLINE static void prepare_for_exit();
|
||||
|
||||
static Thread *get_current_thread();
|
||||
static void bind_thread(Thread *thread);
|
||||
static Thread *bind_thread(Thread *thread);
|
||||
INLINE static bool is_threading_supported();
|
||||
INLINE static bool is_true_threads();
|
||||
INLINE static bool is_simple_threads();
|
||||
|
Loading…
x
Reference in New Issue
Block a user