- std::string cmd;
-
- while (true)
- {
- lock_grab(&sleepLock);
-
- Threads.inputLine = cmd;
- do_sleep = !is_searching;
-
- // Here the thread is parked in sync mode after a line has been read
- while (do_sleep && !do_terminate) // Catches spurious wake ups
- {
- cond_signal(&Threads.sleepCond); // Wake up main thread
- cond_wait(&sleepCond, &sleepLock); // Sleep here
- }
-
- lock_release(&sleepLock);
-
- if (do_terminate)
- return;
-
- if (!std::getline(std::cin, cmd)) // Block waiting for input
- cmd = "quit";
-
- lock_grab(&sleepLock);
-
- // If we are in async mode then process the command now
- if (is_searching)
- {
- // Command "quit" is the last one received by the GUI, so park the
- // thread waiting for exiting.
- if (cmd == "quit")
- is_searching = false;
-
- Threads.do_uci_async_cmd(cmd);
- cmd = ""; // Input has been consumed
- }
-
- lock_release(&sleepLock);
- }