diff --git a/drivers/windows/thread_windows.cpp b/drivers/windows/thread_windows.cpp new file mode 100644 index 00000000000..2a734aab7c3 --- /dev/null +++ b/drivers/windows/thread_windows.cpp @@ -0,0 +1,59 @@ +/**************************************************************************/ +/* thread_windows.cpp */ +/**************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/**************************************************************************/ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/**************************************************************************/ + +#ifdef WINDOWS_ENABLED + +#include "thread_windows.h" + +#include "core/os/thread.h" +#include "core/string/ustring.h" + +#define WIN32_LEAN_AND_MEAN +#include + +typedef HRESULT(WINAPI *SetThreadDescriptionPtr)(HANDLE p_thread, PCWSTR p_thread_description); +SetThreadDescriptionPtr w10_SetThreadDescription = nullptr; + +static Error set_name(const String &p_name) { + HANDLE hThread = GetCurrentThread(); + HRESULT res = E_FAIL; + if (w10_SetThreadDescription) { + res = w10_SetThreadDescription(hThread, (LPCWSTR)p_name.utf16().get_data()); + } + return SUCCEEDED(res) ? OK : ERR_INVALID_PARAMETER; +} + +void init_thread_win() { + w10_SetThreadDescription = (SetThreadDescriptionPtr)(void *)GetProcAddress(LoadLibraryW(L"kernel32.dll"), "SetThreadDescription"); + + Thread::_set_platform_functions({ set_name }); +} + +#endif // WINDOWS_ENABLED diff --git a/drivers/windows/thread_windows.h b/drivers/windows/thread_windows.h new file mode 100644 index 00000000000..1d6ab2c49ff --- /dev/null +++ b/drivers/windows/thread_windows.h @@ -0,0 +1,40 @@ +/**************************************************************************/ +/* thread_windows.h */ +/**************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/**************************************************************************/ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/**************************************************************************/ + +#ifndef THREAD_WINDOWS_H +#define THREAD_WINDOWS_H + +#ifdef WINDOWS_ENABLED + +void init_thread_win(); + +#endif // WINDOWS_ENABLED + +#endif // THREAD_WINDOWS_H diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp index 714f86dedf6..be072ca53fc 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -45,6 +45,7 @@ #include "drivers/windows/file_access_windows_pipe.h" #include "drivers/windows/ip_windows.h" #include "drivers/windows/net_socket_winsock.h" +#include "drivers/windows/thread_windows.h" #include "main/main.h" #include "servers/audio_server.h" #include "servers/rendering/rendering_server_default.h" @@ -249,6 +250,10 @@ void OS_Windows::initialize() { add_error_handler(&error_handlers); #endif +#ifdef THREADS_ENABLED + init_thread_win(); +#endif + FileAccess::make_default(FileAccess::ACCESS_RESOURCES); FileAccess::make_default(FileAccess::ACCESS_USERDATA); FileAccess::make_default(FileAccess::ACCESS_FILESYSTEM);