From dda7de17e74d7e80c58b5f86be5c78393ae65541 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sun, 13 Jan 2013 18:22:33 +0100 Subject: [PATCH] Retire set_timer() Also assure in Thread::timer_loop() that when timer interval is 0 (timer is disabled) we never call check_time() No functional change. --- src/search.cpp | 15 +++++++-------- src/thread.cpp | 13 ++----------- src/thread.h | 2 +- 3 files changed, 10 insertions(+), 20 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index a97c7348..b18ae353 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -239,17 +239,16 @@ void Search::think() { // Set best timer interval to avoid lagging under time pressure. Timer is // used to check for remaining available thinking time. - if (Limits.use_time_management()) - Threads.set_timer(std::min(100, std::max(TimeMgr.available_time() / 16, - TimerResolution))); - else if (Limits.nodes) - Threads.set_timer(2 * TimerResolution); - else - Threads.set_timer(100); + Threads.timer_thread()->maxPly = /* Hack: we use maxPly to set timer interval */ + Limits.use_time_management() ? std::min(100, std::max(TimeMgr.available_time() / 16, TimerResolution)) : + Limits.nodes ? 2 * TimerResolution + : 100; + + Threads.timer_thread()->notify_one(); // Wake up the recurring timer id_loop(RootPos); // Let's start searching ! - Threads.set_timer(0); // Stop timer + Threads.timer_thread()->maxPly = 0; // Stop the timer // Main thread will go to sleep by itself to avoid a race with start_searching() for (size_t i = 0; i < Threads.size(); i++) diff --git a/src/thread.cpp b/src/thread.cpp index fe193314..d674c3ab 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -80,7 +80,8 @@ void Thread::timer_loop() { while (!do_exit) { mutex.lock(); - sleepCondition.wait_for(mutex, maxPly ? maxPly : INT_MAX); + while (!maxPly && !do_exit) + sleepCondition.wait_for(mutex, maxPly ? maxPly : INT_MAX); mutex.unlock(); check_time(); } @@ -237,16 +238,6 @@ bool ThreadPool::available_slave_exists(Thread* master) const { } -// set_timer() is used to set the timer to trigger after msec milliseconds. -// If msec is 0 then timer is stopped. - -void ThreadPool::set_timer(int msec) { - - timer->maxPly = msec; - timer->notify_one(); // Wake up and restart the timer -} - - // split() does the actual work of distributing the work at a node between // several available threads. If it does not succeed in splitting the node // (because no idle threads are available, or because we have no unused split diff --git a/src/thread.h b/src/thread.h index 8b7c0126..12c64e80 100644 --- a/src/thread.h +++ b/src/thread.h @@ -140,10 +140,10 @@ public: int min_split_depth() const { return minimumSplitDepth; } size_t size() const { return threads.size(); } Thread* main_thread() { return threads[0]; } + Thread* timer_thread() { return timer; } void read_uci_options(); bool available_slave_exists(Thread* master) const; - void set_timer(int msec); void wait_for_search_finished(); void start_searching(const Position&, const Search::LimitsType&, const std::vector&, Search::StateStackPtr&); -- 2.39.2