mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-13 06:51:51 +00:00
fix cmd reader blocking main thread
This commit is contained in:
parent
7f4878e2b6
commit
019fe68b48
3 changed files with 22 additions and 1 deletions
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue