-template Value ThreadsManager::split<false>(Position&, Stack*, Value, Value, Value, Depth, Move, int, MovePicker*, int);
-template Value ThreadsManager::split<true>(Position&, Stack*, Value, Value, Value, Depth, Move, int, MovePicker*, int);
-
-
-// Thread::timer_loop() is where the timer thread waits maxPly milliseconds and
-// then calls do_timer_event(). If maxPly is 0 thread sleeps until is woken up.
-extern void check_time();
-
-void Thread::timer_loop() {
-
- while (!do_terminate)
- {
- lock_grab(&sleepLock);
- timed_wait(&sleepCond, &sleepLock, maxPly ? maxPly : INT_MAX);
- lock_release(&sleepLock);
- check_time();
- }
-}
-
-
-// ThreadsManager::set_timer() is used to set the timer to trigger after msec
-// milliseconds. If msec is 0 then timer is stopped.
-
-void ThreadsManager::set_timer(int msec) {
-
- Thread& timer = threads[MAX_THREADS];
-
- lock_grab(&timer.sleepLock);
- timer.maxPly = msec;
- cond_signal(&timer.sleepCond); // Wake up and restart the timer
- lock_release(&timer.sleepLock);
-}
-
-
-// Thread::main_loop() is where the main thread is parked waiting to be started
-// when there is a new search. Main thread will launch all the slave threads.
-
-void Thread::main_loop() {
-
- while (true)
- {
- lock_grab(&sleepLock);
-
- do_sleep = true; // Always return to sleep after a search
- is_searching = false;
-
- while (do_sleep && !do_terminate)
- {
- cond_signal(&Threads.sleepCond); // Wake up UI thread if needed
- cond_wait(&sleepCond, &sleepLock);
- }
+template void Thread::split<false>(Position&, const Stack*, Value, Value, Value*, Move*, Depth, int, MovePicker*, int, bool);
+template void Thread::split< true>(Position&, const Stack*, Value, Value, Value*, Move*, Depth, int, MovePicker*, int, bool);