#if defined(IL_PLATFORM_UNIX)
static inline void *internalThreadStartProc(void *a_arg)
{
return (void*)((iLThreadProc)a_arg)();
}
static inline iLResult iLThread_Create(iLThread* a_thread, iLThreadProc a_proc)
{
return ((pthread_create(a_thread, NULL, internalThreadStartProc, (void*)a_proc) == 0) ? iLR_OK : iLR_UnspecifiedFailure);
}
static inline iLResult iLThread_Destroy(iLThread* a_thread)
{
if (a_thread == 0 || pthread_cancel(*a_thread) != 0)
return iLR_UnspecifiedFailure;
return (pthread_join(*a_thread, NULL) == 0) ? iLR_OK : iLR_UnspecifiedFailure;
}
static inline iLResult iLThread_GetCurrent(iLThread* a_thread)
{
if (!a_thread)
return iLR_UnspecifiedFailure;
*a_thread = pthread_self();
return iLR_OK;
}
static inline iLResult iLThread_Yield()
{
pthread_yield();
return iLR_OK;
}
#else
// XXX TODO add windoes specific thread ode
# error "platform code not implemented"
#endif