-void ThreadsManager::getline(std::string& cmd) {
-
- Thread& listener = threads[MAX_THREADS];
-
- lock_grab(&listener.sleepLock);
-
- listener.is_searching = false; // Set sync mode
-
- // If there is already some input to grab then skip without to wake up the
- // listener. This can happen if after we send the "bestmove", the GUI sends
- // a command that the listener buffers in inputLine before going to sleep.
- if (inputLine.empty())
- {
- listener.do_sleep = false;
- cond_signal(&listener.sleepCond); // Wake up listener thread
-
- while (!listener.do_sleep)
- cond_wait(&sleepCond, &listener.sleepLock); // Wait for input
- }
-
- cmd = inputLine;
- inputLine = ""; // Input has been consumed
-
- lock_release(&listener.sleepLock);
-}
-
-
-// ThreadsManager::start_listener() is called at the beginning of the search to
-// swith from sync behaviour (default) to async and so be able to read from UCI
-// while other threads are searching. This avoids main thread polling for input.
-
-void ThreadsManager::start_listener() {
-
- Thread& listener = threads[MAX_THREADS];
-
- lock_grab(&listener.sleepLock);
- listener.is_searching = true;
- listener.do_sleep = false;
- cond_signal(&listener.sleepCond); // Wake up listener thread
- lock_release(&listener.sleepLock);
-}
+void ThreadsManager::start_searching(const Position& pos, const LimitsType& limits,
+ const std::vector<Move>& searchMoves) {
+ wait_for_search_finished();