Newer
Older
invertedlogic / InvertedLogic / iLPlatform / iLThreads.inl
@John Ryland John Ryland on 10 Nov 2019 937 bytes rename


#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