You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-23 15:16:17 +00:00
Modernize Thread
- Based on C++11's `thread` and `thread_local` - No more need to allocate-deallocate or check for null - No pointer anymore, just a member variable - Platform-specific implementations no longer needed (except for the few cases of non-portable functions) - Simpler for `NO_THREADS` - Thread ids are now the same across platforms (main is 1; others follow)
This commit is contained in:
@@ -74,18 +74,17 @@ void thread_process_array(uint32_t p_elements, C *p_instance, M p_method, U p_us
|
||||
data.elements = p_elements;
|
||||
data.process(data.index); //process first, let threads increment for next
|
||||
|
||||
Vector<Thread *> threads;
|
||||
int thread_count = OS::get_singleton()->get_processor_count();
|
||||
Thread *threads = memnew_arr(Thread, thread_count);
|
||||
|
||||
threads.resize(OS::get_singleton()->get_processor_count());
|
||||
|
||||
for (int i = 0; i < threads.size(); i++) {
|
||||
threads.write[i] = Thread::create(process_array_thread<ThreadArrayProcessData<C, U>>, &data);
|
||||
for (int i = 0; i < thread_count; i++) {
|
||||
threads[i].start(process_array_thread<ThreadArrayProcessData<C, U>>, &data);
|
||||
}
|
||||
|
||||
for (int i = 0; i < threads.size(); i++) {
|
||||
Thread::wait_to_finish(threads[i]);
|
||||
memdelete(threads[i]);
|
||||
for (int i = 0; i < thread_count; i++) {
|
||||
threads[i].wait_to_finish();
|
||||
}
|
||||
memdelete_arr(threads);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
Reference in New Issue
Block a user