+ // Wake up needed threads and reset maxPly counter
+ for (int i = 0; i < Threads.size(); i++)
+ {
+ Threads[i].maxPly = 0;
+ Threads[i].wake_up();
+ }
+
+ // Set best timer interval to avoid lagging under time pressure. Timer is
+ // used to check for remaining available thinking time.
+ TimeMgr.init(Limits, pos.startpos_ply_counter());
+
+ if (TimeMgr.available_time())
+ Threads.set_timer(std::min(100, std::max(TimeMgr.available_time() / 8, 20)));
+ else
+ Threads.set_timer(100);
+
+ // Start async mode to catch UCI commands sent to us while searching,
+ // like "quit", "stop", etc.
+ Threads.start_listener();
+