mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-21 09:37:16 +08:00
Rewrite async I/O
Use the starting thread to wait for GUI input and instead use the other threads to search. The consequence is that now think() is alwasy started on a differnt thread than the caller that returns immediately waiting for input. This reformat greatly simplifies the code and is more in line with the common way to implement this feature. As a side effect now we don't need anymore Makefile tricks with sleep() to allow profile builds. No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
@@ -27,6 +27,7 @@
|
||||
#include "movepick.h"
|
||||
#include "pawns.h"
|
||||
#include "position.h"
|
||||
#include "search.h"
|
||||
|
||||
const int MAX_THREADS = 32;
|
||||
const int MAX_ACTIVE_SPLIT_POINTS = 8;
|
||||
@@ -69,7 +70,7 @@ struct Thread {
|
||||
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];
|
||||
@@ -116,10 +117,9 @@ public:
|
||||
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 start_thinking(bool asyncMode = true);
|
||||
void set_timer(int msec);
|
||||
void wait_for_stop_or_ponderhit();
|
||||
|
||||
template <bool Fake>
|
||||
Value split(Position& pos, SearchStack* ss, Value alpha, Value beta, Value bestValue,
|
||||
@@ -134,7 +134,6 @@ private:
|
||||
int activeThreads;
|
||||
bool useSleepingThreads;
|
||||
WaitCondition sleepCond;
|
||||
std::string inputLine;
|
||||
};
|
||||
|
||||
extern ThreadsManager Threads;
|
||||
|
||||
Reference in New Issue
Block a user