-class ThreadsManager {
- /* As long as the single ThreadsManager object is defined as a global we don't
- need to explicitly initialize to zero its data members because variables with
- static storage duration are automatically set to zero before enter main()
- */
-public:
- Thread& operator[](int threadID) { return threads[threadID]; }
- void init();
- void exit();
+struct MainThread : public Thread {
+ virtual void search();
+ void check_time();
+
+ bool easyMovePlayed, failedLow;
+ double bestMoveChanges;
+ Value previousScore;
+ int callsCnt = 0;
+};
+
+
+/// ThreadPool struct handles all the threads-related stuff like init, starting,
+/// parking and, most importantly, launching a thread. All the access to threads
+/// data is done through this class.
+
+struct ThreadPool : public std::vector<Thread*> {