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 "coders/json.hpp"
#include "debug/Logger.hpp"
#include "util/platform.hpp"
#include <thread>
#include <iostream>
@ -18,7 +19,12 @@ void cmd::start_stdin_cmd_reader(Engine& engine) {
logger.info() << "reader thread started";
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()) {
continue;
}

View file

@ -14,8 +14,10 @@
#ifdef _WIN32
#include <Windows.h>
#include <conio.h>
#pragma comment(lib, "winmm.lib")
#else
#include <sys/poll.h>
#include <unistd.h>
#endif
@ -290,3 +292,14 @@ void platform::new_engine_instance(const std::vector<std::string>& args) {
}
#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);
/// @brief Open URL in web browser
bool open_url(const std::string& url);
/// @brief Check if stdin has input
bool stdin_has_data();
}