fix cmd reader blocking main thread

This commit is contained in:
clasher113 2026-03-16 16:28:12 +02:00
parent 7f4878e2b6
commit 019fe68b48
3 changed files with 22 additions and 1 deletions

View file

@ -4,6 +4,7 @@
#include "logic/CommandsInterpreter.hpp" #include "logic/CommandsInterpreter.hpp"
#include "coders/json.hpp" #include "coders/json.hpp"
#include "debug/Logger.hpp" #include "debug/Logger.hpp"
#include "util/platform.hpp"
#include <thread> #include <thread>
#include <iostream> #include <iostream>
@ -18,7 +19,12 @@ void cmd::start_stdin_cmd_reader(Engine& engine) {
logger.info() << "reader thread started"; logger.info() << "reader thread started";
std::string line; std::string line;
while (std::getline(std::cin, line)) { while (true) {
if (!platform::stdin_has_data()) {
platform::sleep(10);
continue;
}
std::getline(std::cin, line);
if (line.empty()) { if (line.empty()) {
continue; continue;
} }

View file

@ -14,8 +14,10 @@
#ifdef _WIN32 #ifdef _WIN32
#include <Windows.h> #include <Windows.h>
#include <conio.h>
#pragma comment(lib, "winmm.lib") #pragma comment(lib, "winmm.lib")
#else #else
#include <sys/poll.h>
#include <unistd.h> #include <unistd.h>
#endif #endif
@ -290,3 +292,14 @@ void platform::new_engine_instance(const std::vector<std::string>& args) {
} }
#endif #endif
} }
bool platform::stdin_has_data() {
#ifdef _WIN32
return _kbhit();
#else
struct pollfd fds;
fds.fd = STDIN_FILENO;
fds.events = POLLIN;
return poll(&fds, 1, 0) == 1;
#endif
}

View file

@ -21,4 +21,6 @@ namespace platform {
void new_engine_instance(const std::vector<std::string>& args); void new_engine_instance(const std::vector<std::string>& args);
/// @brief Open URL in web browser /// @brief Open URL in web browser
bool open_url(const std::string& url); bool open_url(const std::string& url);
/// @brief Check if stdin has input
bool stdin_has_data();
} }