22 #include <sys/select.h>
28 itsThread = std::thread([&]{
29 struct timeval tv; fd_set fds; tv.tv_sec = 0; tv.tv_usec = 30000;
30 while (itsRunning.load())
33 FD_SET(STDIN_FILENO, &fds);
34 int ret = select(STDIN_FILENO+1, &fds, nullptr, nullptr, &tv);
35 if (ret == -1) LERROR(
"Ignoring error on stdin: " << strerror(errno));
38 std::string str; std::getline(std::cin, str);
39 std::lock_guard<std::mutex> _(itsMtx);
40 itsString = std::move(str);
49 itsRunning.store(
false);
56 std::lock_guard<std::mutex> _(itsMtx);
57 if (itsString.empty() ==
false) { str = std::move(itsString); itsString = std::string();
return true; }
64 std::lock_guard<std::mutex> _(itsMtx);
65 std::cout << str << std::endl;