Optimize threaded console
This commit is contained in:
parent
d45554eeaa
commit
e253ab7070
@ -1,5 +1,7 @@
|
|||||||
#include "STDInclude.hpp"
|
#include "STDInclude.hpp"
|
||||||
|
|
||||||
|
using namespace std::literals;
|
||||||
|
|
||||||
namespace Components
|
namespace Components
|
||||||
{
|
{
|
||||||
WINDOW* Console::OutputWindow;
|
WINDOW* Console::OutputWindow;
|
||||||
@ -381,18 +383,27 @@ namespace Components
|
|||||||
DispatchMessageA(&message);
|
DispatchMessageA(&message);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (Game::Com_Milliseconds() - Console::LastRefresh > 50)
|
if (Game::Com_Milliseconds() - Console::LastRefresh > 100 &&
|
||||||
// {
|
MessageBoxA(0, "The application is not responding anymore, do you want to force its termination?", "Application is not responding", MB_ICONEXCLAMATION | MB_YESNO) == IDYES)
|
||||||
// // Force process termination
|
{
|
||||||
// // if the main thread is not responding
|
// Force process termination
|
||||||
// OutputDebugStringA("Process termination forced, as the main thread is not responding!");
|
// if the main thread is not responding
|
||||||
// ExitProcess(static_cast<uint32_t>(-1));
|
OutputDebugStringA("Process termination forced, as the main thread is not responding!");
|
||||||
// }
|
|
||||||
// else
|
// We can not force the termination in this thread
|
||||||
// {
|
// The destructor would be called in this thread
|
||||||
|
// and would try to join this thread, which is impossible
|
||||||
|
std::async([] ()
|
||||||
|
{
|
||||||
|
std::this_thread::sleep_for(200ms);
|
||||||
|
ExitProcess(static_cast<uint32_t>(-1));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
// Send quit command to safely terminate the application
|
// Send quit command to safely terminate the application
|
||||||
Command::Execute("wait 200;quit\n", false);
|
Command::Execute("wait 200;quit\n", false);
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Console::Console()
|
Console::Console()
|
||||||
@ -428,14 +439,16 @@ namespace Components
|
|||||||
{
|
{
|
||||||
FreeConsole();
|
FreeConsole();
|
||||||
Utils::Hook::Nop(0x60BB58, 11);
|
Utils::Hook::Nop(0x60BB58, 11);
|
||||||
Utils::Hook::Nop(0x60BB68, 5);
|
|
||||||
|
Utils::Hook(0x60BB68, [] ()
|
||||||
|
{
|
||||||
|
Console::ConsoleThread = std::thread(Console::ConsoleRunner);
|
||||||
|
}, HOOK_CALL).Install()->Quick();
|
||||||
|
|
||||||
QuickPatch::OnFrame([] ()
|
QuickPatch::OnFrame([] ()
|
||||||
{
|
{
|
||||||
Console::LastRefresh = Game::Com_Milliseconds();
|
Console::LastRefresh = Game::Com_Milliseconds();
|
||||||
});
|
});
|
||||||
|
|
||||||
Console::ConsoleThread = std::thread(Console::ConsoleRunner);
|
|
||||||
}
|
}
|
||||||
else if (Dedicated::IsDedicated()/* || ZoneBuilder::IsEnabled()*/)
|
else if (Dedicated::IsDedicated()/* || ZoneBuilder::IsEnabled()*/)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user