#include "movepick.h"
#include "pawns.h"
#include "position.h"
+#include "search.h"
const int MAX_THREADS = 32;
const int MAX_ACTIVE_SPLIT_POINTS = 8;
bool cutoff_occurred() const;
bool is_available_to(int master) const;
void idle_loop(SplitPoint* sp);
- void listener_loop();
+ void main_loop();
+ void timer_loop();
SplitPoint splitPoints[MAX_ACTIVE_SPLIT_POINTS];
MaterialInfoTable materialTable;
void set_size(int cnt);
void read_uci_options();
bool available_slave_exists(int master) const;
+ bool split_point_finished(SplitPoint* sp) const;
- void getline(std::string& cmd);
- void do_uci_async_cmd(const std::string& cmd);
- void start_listener();
- void stop_listener();
+ void start_thinking(bool asyncMode = true);
+ void set_timer(int msec);
+ void wait_for_stop_or_ponderhit();
+ void wait_end_of_search();
template <bool Fake>
Value split(Position& pos, SearchStack* ss, Value alpha, Value beta, Value bestValue,
private:
friend struct Thread;
- Thread threads[MAX_THREADS + 1];
+ Thread threads[MAX_THREADS + 2]; // Last 2 are the listener and the timer
Lock threadsLock;
Depth minimumSplitDepth;
int maxThreadsPerSplitPoint;
int activeThreads;
bool useSleepingThreads;
WaitCondition sleepCond;
- std::string inputLine;
};
extern ThreadsManager Threads;