#include "ai.hpp" #include #include #include Move ai::AI::search(const Board& b) { Move result; std::condition_variable cv; std::mutex cv_mutex; double elapsed; stop_computation = false; // Start computation in a separate thread std::thread computation_thread([&]() { auto start = std::chrono::steady_clock::now(); result = _search(b); auto end = std::chrono::steady_clock::now(); elapsed = std::chrono::duration_cast(end - start) .count(); // Notify the timer thread that computation is done { std::lock_guard lock(cv_mutex); stop_computation = true; cv.notify_one(); } }); // Start a timer thread to stop computation after given time std::thread timer_thread([&]() { std::unique_lock lock(cv_mutex); if (!cv.wait_for(lock, thinking_time, [&] { return stop_computation.load(); })) { // Timeout reached; set stop flag stop_computation = true; } }); // Wait for computation thread to finish computation_thread.join(); // Ensure timer thread is also stopped timer_thread.join(); std::cout << "Took " << elapsed << " ms" << std::endl; return result; }