From: Marco Costalba Date: Sun, 13 Jan 2013 17:22:33 +0000 (+0100) Subject: Retire set_timer() X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=dda7de17e74d7e80c58b5f86be5c78393ae65541 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. --- 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&);