-
-
-/// check_time() is called by the timer thread when the timer triggers. It is
-/// used to print debug info and, more importantly, to detect when we are out of
-/// available time and thus stop the search.
-
-void check_time() {
-
- static TimePoint lastInfoTime = now();
- int elapsed = Time.elapsed();
-
- if (now() - lastInfoTime >= 1000)
- {
- lastInfoTime = now();
- dbg_print();
- }
-
- // An engine may not stop pondering until told so by the GUI
- if (Limits.ponder)
- return;
-
- if (Limits.use_time_management())
- {
- bool stillAtFirstMove = Signals.firstRootMove
- && !Signals.failedLowAtRoot
- && elapsed > Time.available() * 75 / 100;
-
- if ( stillAtFirstMove
- || elapsed > Time.maximum() - 2 * TimerThread::Resolution)
- Signals.stop = true;
- }
- else if (Limits.movetime && elapsed >= Limits.movetime)
- Signals.stop = true;
-
- else if (Limits.nodes && Threads.nodes_searched() >= Limits.nodes)
- Signals.stop = true;
-}