thread.h revision 881b5ff6bc55e1fb0f4ef42f9782ccec79c0a138
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * InnoTek Portable Runtime - Internal RTThread header.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * Copyright (C) 2006 InnoTek Systemberatung GmbH
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * available from http://www.virtualbox.org. This file is free software;
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * you can redistribute it and/or modify it under the terms of the GNU
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * General Public License as published by the Free Software Foundation,
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * distribution. VirtualBox OSE is distributed in the hope that it will
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * be useful, but WITHOUT ANY WARRANTY of any kind.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * If you received this file as part of a commercial VirtualBox
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * distribution, then only the terms of your commercial VirtualBox
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * license agreement apply instead of the previous paragraph.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * The thread state.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** The usual invalid 0 value. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** The thread is being initialized. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** The thread has terminated */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Probably running. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Waiting on a critical section. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Waiting on a mutex. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Waiting on a event semaphore. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Waiting on a event multiple wakeup semaphore. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** The thread is sleeping. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** The usual 32-bit size hack. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync/** Checks if a thread state indicates that the thread is sleeping. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync#define RTTHREAD_IS_SLEEPING(enmState) ( (enmState) == RTTHREADSTATE_CRITSECT \
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync/** Max thread name length. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * Internal represenation of a thread.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsynctypedef struct RTTHREADINT
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Avl node core - the key is the native thread id. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Magic value (RTTHREADINT_MAGIC). */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Reference counter. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** The current thread state. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** The thread handle.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * This is not valid until the create function has returned! */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** The user event semaphore. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** The terminated event semaphore. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** The thread type. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** The thread creation flags. (RTTHREADFLAGS) */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Internal flags. (RTTHREADINT_FLAGS_ *) */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** The result code. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Thread function. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Thread function argument. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Actual stack size. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** What we're blocking on. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Where we're blocking. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync const char volatile *pszBlockFile;
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Where we're blocking. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync unsigned volatile uBlockLine;
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Where we're blocking. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync#endif /* IN_RING3 */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** Thread name. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync/** @name RTTHREADINT::fIntFlags Masks and Bits.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync/** Set if the thread is an alien thread.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * Clear if the thread was created by IPRT. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync/** Set if the thread has terminated.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * Clear if the thread is running. */
int rtThreadNativeInit(void);
#ifdef IN_RING3
# ifdef __WIN__
void rtThreadNativeDetach(void);
/* thread.cpp */
int rtThreadInit(void);
void rtThreadTerm(void);
#ifdef IN_RING3