mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-04 18:41: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 "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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue