まずは header "pthread.h" /* pthread.h */ #ifndef PTHREAD_H_INCLUDED #define PTHREAD_H_INCLUDED #ifdef WIN32 #include <windows.h> #include <process.h> typedef struct { void*(*startfunc)(void*); void* arg; HANDLE handle; void* retval; } pthread_t; typedef struct { int starttype; } pthread_attr_t; static unsigned __stdcall win32_threadStart(void*); int pthread_create(pthread_t* thread, pthread_attr_t* attr, void*(start_routine)(void*), void* arg); int pthread_join(pthread_t th, void** thread_return); #endif /* WIN32 */ #endif /* PTHREAD_H_INCLUDED */ で、本体 "pthread.c" /* pthread.c */ #include "pthread.h" static unsigned __stdcall win32_threadStart(void* arg) { pthread_t* pt = (pthread_t*)arg; pt->retval = pt->startfunc(pt->arg); return 0; } int pthread_create(pthread_t* thread, pthread_attr_t* attr, void*(*start_routine)(void*), void* arg) { thread->startfunc = start_routine; thread->arg = arg; thread->retval = 0; thread->handle = (HANDLE)_beginthreadex(0, 0, win32_threadStart, thread, 0, 0); return 0; } int pthread_join(pthread_t th, void** thread_return) { if(WaitForSingleObject(th.handle, INFINITE) == WAIT_OBJECT_0) { if(thread_return != 0) *thread_return = th.retval; return 0; } return (-1); } で、object module を作るには gcc -DWIN32 -c pthread.c |