bool cutoff_occurred() const;
bool is_available_to(int master) const;
void idle_loop(SplitPoint* sp);
+ void listener_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 start_listener();
+ void stop_listener();
+ void set_timer(int msec);
template <bool Fake>
Value split(Position& pos, SearchStack* ss, Value alpha, Value beta, Value bestValue,
Depth depth, Move threatMove, int moveCount, MovePicker* mp, int nodeType);
private:
- Thread threads[MAX_THREADS];
+ friend struct Thread;
+
+ 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;