-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 idle_loop();
+ volatile bool thinking = true; // Avoid a race with start_thinking()
+};
+
+struct TimerThread : public ThreadBase {
+
+ static const int Resolution = 5; // Millisec between two check_time() calls
+
+ virtual void idle_loop();
+
+ bool run = false;
+};
+
+
+/// ThreadPool struct handles all the threads related stuff like init, starting,
+/// parking and, most importantly, launching a slave thread at a split point.
+/// All the access to shared thread data is done through this class.