diff --git a/src/lock.h b/src/lock.h index 1e71305e..85d32a5c 100644 --- a/src/lock.h +++ b/src/lock.h @@ -27,6 +27,7 @@ typedef pthread_mutex_t Lock; typedef pthread_cond_t WaitCondition; typedef pthread_t ThreadHandle; +typedef void*(*start_fn)(void*); # define lock_init(x) pthread_mutex_init(&(x), NULL) # define lock_grab(x) pthread_mutex_lock(&(x)) @@ -37,7 +38,7 @@ typedef pthread_t ThreadHandle; # define cond_signal(x) pthread_cond_signal(&(x)) # define cond_wait(x,y) pthread_cond_wait(&(x),&(y)) # define cond_timedwait(x,y,z) pthread_cond_timedwait(&(x),&(y),z) -# define thread_create(x,f,id) !pthread_create(&(x),NULL,f,&(id)) +# define thread_create(x,f,id) !pthread_create(&(x),NULL,(start_fn)f,&(id)) # define thread_join(x) pthread_join(x, NULL) #else @@ -67,7 +68,7 @@ typedef HANDLE ThreadHandle; # define cond_signal(x) SetEvent(x) # define cond_wait(x,y) { lock_release(y); WaitForSingleObject(x, INFINITE); lock_grab(y); } # define cond_timedwait(x,y,z) { lock_release(y); WaitForSingleObject(x,z); lock_grab(y); } -# define thread_create(x,f,id) (x = CreateThread(NULL,0,f,&(id),0,NULL), x != NULL) +# define thread_create(x,f,id) (x = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)f,&(id),0,NULL), x != NULL) # define thread_join(x) { WaitForSingleObject(x, INFINITE); CloseHandle(x); } #endif diff --git a/src/thread.cpp b/src/thread.cpp index 31c5961d..5c23aa50 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -36,13 +36,7 @@ namespace { extern "C" { // and last thread are special. First one is the main search thread while the // last one mimics a timer, they run in main_loop() and timer_loop(). -#if defined(_WIN32) || defined(_WIN64) - DWORD WINAPI start_routine(LPVOID thread) { -#else - void* start_routine(void* thread) { -#endif - - Thread* th = (Thread*)thread; + long start_routine(Thread* th) { if (th->threadID == 0) th->main_loop(); @@ -299,7 +293,7 @@ bool ThreadsManager::available_slave_exists(int master) const { template Value ThreadsManager::split(Position& pos, Stack* ss, Value alpha, Value beta, Value bestValue, Move* bestMove, Depth depth, - Move threatMove, int moveCount, MovePicker *mp, int nodeType) { + Move threatMove, int moveCount, MovePicker* mp, int nodeType) { assert(pos.pos_is_ok()); assert(bestValue > -VALUE_INFINITE); assert(bestValue <= alpha);