/* File: Threads.h Contains: Thread Manager Interfaces. Version: QuickTime 7.3 Copyright: (c) 2007 (c) 1991-2001 by Apple Computer, Inc., all rights reserved. Bugs?: For bug reports, consult the following page on the World Wide Web: http://developer.apple.com/bugreporter/ */ #ifndef __THREADS__ #define __THREADS__ #ifndef __MACTYPES__ #include #endif #ifndef __MIXEDMODE__ #include #endif #ifndef __MACERRORS__ #include #endif #if PRAGMA_ONCE #pragma once #endif #ifdef __cplusplus extern "C" { #endif #if PRAGMA_IMPORT #pragma import on #endif #if PRAGMA_STRUCT_ALIGN #pragma options align=mac68k #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(push, 2) #elif PRAGMA_STRUCT_PACK #pragma pack(2) #endif /* Thread states*/ typedef UInt16 ThreadState; enum { kReadyThreadState = 0, kStoppedThreadState = 1, kRunningThreadState = 2 }; /* Error codes have been moved to Errors.(pah)*/ /* Thread environment characteristics*/ typedef void * ThreadTaskRef; /* Thread characteristics*/ typedef UInt32 ThreadStyle; enum { kCooperativeThread = 1L << 0, kPreemptiveThread = 1L << 1 }; /* Thread identifiers*/ typedef UInt32 ThreadID; enum { kNoThreadID = 0, kCurrentThreadID = 1, kApplicationThreadID = 2 }; /* Options when creating a thread*/ typedef UInt32 ThreadOptions; enum { kNewSuspend = (1 << 0), kUsePremadeThread = (1 << 1), kCreateIfNeeded = (1 << 2), kFPUNotNeeded = (1 << 3), kExactMatchThread = (1 << 4) }; /* Information supplied to the custom scheduler*/ struct SchedulerInfoRec { UInt32 InfoRecSize; ThreadID CurrentThreadID; ThreadID SuggestedThreadID; ThreadID InterruptedCoopThreadID; }; typedef struct SchedulerInfoRec SchedulerInfoRec; typedef SchedulerInfoRec * SchedulerInfoRecPtr; /* The following ProcPtrs cannot be interchanged with UniversalProcPtrs because of differences between 680x0 and PowerPC runtime architectures with regard to the implementation of the Thread Manager. */ typedef void * voidPtr; /* Prototype for thread's entry (main) routine*/ typedef CALLBACK_API( voidPtr , ThreadEntryProcPtr )(void * threadParam); /* Prototype for custom thread scheduler routine*/ typedef CALLBACK_API( ThreadID , ThreadSchedulerProcPtr )(SchedulerInfoRecPtr schedulerInfo); /* Prototype for custom thread switcher routine*/ typedef CALLBACK_API( void , ThreadSwitchProcPtr )(ThreadID threadBeingSwitched, void *switchProcParam); /* Prototype for thread termination notification routine*/ typedef CALLBACK_API( void , ThreadTerminationProcPtr )(ThreadID threadTerminated, void *terminationProcParam); /* Prototype for debugger NewThread notification*/ typedef CALLBACK_API( void , DebuggerNewThreadProcPtr )(ThreadID threadCreated); /* Prototype for debugger DisposeThread notification*/ typedef CALLBACK_API( void , DebuggerDisposeThreadProcPtr )(ThreadID threadDeleted); /* Prototype for debugger schedule notification*/ typedef CALLBACK_API( ThreadID , DebuggerThreadSchedulerProcPtr )(SchedulerInfoRecPtr schedulerInfo); typedef TVECTOR_UPP_TYPE(ThreadEntryProcPtr) ThreadEntryUPP; typedef TVECTOR_UPP_TYPE(ThreadSchedulerProcPtr) ThreadSchedulerUPP; typedef TVECTOR_UPP_TYPE(ThreadSwitchProcPtr) ThreadSwitchUPP; typedef TVECTOR_UPP_TYPE(ThreadTerminationProcPtr) ThreadTerminationUPP; typedef TVECTOR_UPP_TYPE(DebuggerNewThreadProcPtr) DebuggerNewThreadUPP; typedef TVECTOR_UPP_TYPE(DebuggerDisposeThreadProcPtr) DebuggerDisposeThreadUPP; typedef TVECTOR_UPP_TYPE(DebuggerThreadSchedulerProcPtr) DebuggerThreadSchedulerUPP; /* * NewThreadEntryUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( ThreadEntryUPP ) NewThreadEntryUPP(ThreadEntryProcPtr userRoutine); #if !OPAQUE_UPP_TYPES enum { uppThreadEntryProcInfo = 0x000000F0 }; /* pascal 4_bytes Func(4_bytes) */ #ifdef __cplusplus inline DEFINE_API_C(ThreadEntryUPP) NewThreadEntryUPP(ThreadEntryProcPtr userRoutine) { return userRoutine; } #else #define NewThreadEntryUPP(userRoutine) (userRoutine) #endif #endif /* * NewThreadSchedulerUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( ThreadSchedulerUPP ) NewThreadSchedulerUPP(ThreadSchedulerProcPtr userRoutine); #if !OPAQUE_UPP_TYPES enum { uppThreadSchedulerProcInfo = 0x000000F0 }; /* pascal 4_bytes Func(4_bytes) */ #ifdef __cplusplus inline DEFINE_API_C(ThreadSchedulerUPP) NewThreadSchedulerUPP(ThreadSchedulerProcPtr userRoutine) { return userRoutine; } #else #define NewThreadSchedulerUPP(userRoutine) (userRoutine) #endif #endif /* * NewThreadSwitchUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( ThreadSwitchUPP ) NewThreadSwitchUPP(ThreadSwitchProcPtr userRoutine); #if !OPAQUE_UPP_TYPES enum { uppThreadSwitchProcInfo = 0x000003C0 }; /* pascal no_return_value Func(4_bytes, 4_bytes) */ #ifdef __cplusplus inline DEFINE_API_C(ThreadSwitchUPP) NewThreadSwitchUPP(ThreadSwitchProcPtr userRoutine) { return userRoutine; } #else #define NewThreadSwitchUPP(userRoutine) (userRoutine) #endif #endif /* * NewThreadTerminationUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( ThreadTerminationUPP ) NewThreadTerminationUPP(ThreadTerminationProcPtr userRoutine); #if !OPAQUE_UPP_TYPES enum { uppThreadTerminationProcInfo = 0x000003C0 }; /* pascal no_return_value Func(4_bytes, 4_bytes) */ #ifdef __cplusplus inline DEFINE_API_C(ThreadTerminationUPP) NewThreadTerminationUPP(ThreadTerminationProcPtr userRoutine) { return userRoutine; } #else #define NewThreadTerminationUPP(userRoutine) (userRoutine) #endif #endif /* * NewDebuggerNewThreadUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( DebuggerNewThreadUPP ) NewDebuggerNewThreadUPP(DebuggerNewThreadProcPtr userRoutine); #if !OPAQUE_UPP_TYPES enum { uppDebuggerNewThreadProcInfo = 0x000000C0 }; /* pascal no_return_value Func(4_bytes) */ #ifdef __cplusplus inline DEFINE_API_C(DebuggerNewThreadUPP) NewDebuggerNewThreadUPP(DebuggerNewThreadProcPtr userRoutine) { return userRoutine; } #else #define NewDebuggerNewThreadUPP(userRoutine) (userRoutine) #endif #endif /* * NewDebuggerDisposeThreadUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( DebuggerDisposeThreadUPP ) NewDebuggerDisposeThreadUPP(DebuggerDisposeThreadProcPtr userRoutine); #if !OPAQUE_UPP_TYPES enum { uppDebuggerDisposeThreadProcInfo = 0x000000C0 }; /* pascal no_return_value Func(4_bytes) */ #ifdef __cplusplus inline DEFINE_API_C(DebuggerDisposeThreadUPP) NewDebuggerDisposeThreadUPP(DebuggerDisposeThreadProcPtr userRoutine) { return userRoutine; } #else #define NewDebuggerDisposeThreadUPP(userRoutine) (userRoutine) #endif #endif /* * NewDebuggerThreadSchedulerUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( DebuggerThreadSchedulerUPP ) NewDebuggerThreadSchedulerUPP(DebuggerThreadSchedulerProcPtr userRoutine); #if !OPAQUE_UPP_TYPES enum { uppDebuggerThreadSchedulerProcInfo = 0x000000F0 }; /* pascal 4_bytes Func(4_bytes) */ #ifdef __cplusplus inline DEFINE_API_C(DebuggerThreadSchedulerUPP) NewDebuggerThreadSchedulerUPP(DebuggerThreadSchedulerProcPtr userRoutine) { return userRoutine; } #else #define NewDebuggerThreadSchedulerUPP(userRoutine) (userRoutine) #endif #endif /* * DisposeThreadEntryUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( void ) DisposeThreadEntryUPP(ThreadEntryUPP userUPP); #if !OPAQUE_UPP_TYPES #ifdef __cplusplus inline DEFINE_API_C(void) DisposeThreadEntryUPP(ThreadEntryUPP) {} #else #define DisposeThreadEntryUPP(userUPP) #endif #endif /* * DisposeThreadSchedulerUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( void ) DisposeThreadSchedulerUPP(ThreadSchedulerUPP userUPP); #if !OPAQUE_UPP_TYPES #ifdef __cplusplus inline DEFINE_API_C(void) DisposeThreadSchedulerUPP(ThreadSchedulerUPP) {} #else #define DisposeThreadSchedulerUPP(userUPP) #endif #endif /* * DisposeThreadSwitchUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( void ) DisposeThreadSwitchUPP(ThreadSwitchUPP userUPP); #if !OPAQUE_UPP_TYPES #ifdef __cplusplus inline DEFINE_API_C(void) DisposeThreadSwitchUPP(ThreadSwitchUPP) {} #else #define DisposeThreadSwitchUPP(userUPP) #endif #endif /* * DisposeThreadTerminationUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( void ) DisposeThreadTerminationUPP(ThreadTerminationUPP userUPP); #if !OPAQUE_UPP_TYPES #ifdef __cplusplus inline DEFINE_API_C(void) DisposeThreadTerminationUPP(ThreadTerminationUPP) {} #else #define DisposeThreadTerminationUPP(userUPP) #endif #endif /* * DisposeDebuggerNewThreadUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( void ) DisposeDebuggerNewThreadUPP(DebuggerNewThreadUPP userUPP); #if !OPAQUE_UPP_TYPES #ifdef __cplusplus inline DEFINE_API_C(void) DisposeDebuggerNewThreadUPP(DebuggerNewThreadUPP) {} #else #define DisposeDebuggerNewThreadUPP(userUPP) #endif #endif /* * DisposeDebuggerDisposeThreadUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( void ) DisposeDebuggerDisposeThreadUPP(DebuggerDisposeThreadUPP userUPP); #if !OPAQUE_UPP_TYPES #ifdef __cplusplus inline DEFINE_API_C(void) DisposeDebuggerDisposeThreadUPP(DebuggerDisposeThreadUPP) {} #else #define DisposeDebuggerDisposeThreadUPP(userUPP) #endif #endif /* * DisposeDebuggerThreadSchedulerUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( void ) DisposeDebuggerThreadSchedulerUPP(DebuggerThreadSchedulerUPP userUPP); #if !OPAQUE_UPP_TYPES #ifdef __cplusplus inline DEFINE_API_C(void) DisposeDebuggerThreadSchedulerUPP(DebuggerThreadSchedulerUPP) {} #else #define DisposeDebuggerThreadSchedulerUPP(userUPP) #endif #endif /* * InvokeThreadEntryUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( voidPtr ) InvokeThreadEntryUPP( void * threadParam, ThreadEntryUPP userUPP); #if !OPAQUE_UPP_TYPES #ifdef __cplusplus inline DEFINE_API_C(voidPtr) InvokeThreadEntryUPP(void * threadParam, ThreadEntryUPP userUPP) { return (*userUPP)(threadParam); } #else #define InvokeThreadEntryUPP(threadParam, userUPP) (*userUPP)(threadParam) #endif #endif /* * InvokeThreadSchedulerUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( ThreadID ) InvokeThreadSchedulerUPP( SchedulerInfoRecPtr schedulerInfo, ThreadSchedulerUPP userUPP); #if !OPAQUE_UPP_TYPES #ifdef __cplusplus inline DEFINE_API_C(ThreadID) InvokeThreadSchedulerUPP(SchedulerInfoRecPtr schedulerInfo, ThreadSchedulerUPP userUPP) { return (*userUPP)(schedulerInfo); } #else #define InvokeThreadSchedulerUPP(schedulerInfo, userUPP) (*userUPP)(schedulerInfo) #endif #endif /* * InvokeThreadSwitchUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( void ) InvokeThreadSwitchUPP( ThreadID threadBeingSwitched, void * switchProcParam, ThreadSwitchUPP userUPP); #if !OPAQUE_UPP_TYPES #ifdef __cplusplus inline DEFINE_API_C(void) InvokeThreadSwitchUPP(ThreadID threadBeingSwitched, void * switchProcParam, ThreadSwitchUPP userUPP) { (*userUPP)(threadBeingSwitched, switchProcParam); } #else #define InvokeThreadSwitchUPP(threadBeingSwitched, switchProcParam, userUPP) (*userUPP)(threadBeingSwitched, switchProcParam) #endif #endif /* * InvokeThreadTerminationUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( void ) InvokeThreadTerminationUPP( ThreadID threadTerminated, void * terminationProcParam, ThreadTerminationUPP userUPP); #if !OPAQUE_UPP_TYPES #ifdef __cplusplus inline DEFINE_API_C(void) InvokeThreadTerminationUPP(ThreadID threadTerminated, void * terminationProcParam, ThreadTerminationUPP userUPP) { (*userUPP)(threadTerminated, terminationProcParam); } #else #define InvokeThreadTerminationUPP(threadTerminated, terminationProcParam, userUPP) (*userUPP)(threadTerminated, terminationProcParam) #endif #endif /* * InvokeDebuggerNewThreadUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( void ) InvokeDebuggerNewThreadUPP( ThreadID threadCreated, DebuggerNewThreadUPP userUPP); #if !OPAQUE_UPP_TYPES #ifdef __cplusplus inline DEFINE_API_C(void) InvokeDebuggerNewThreadUPP(ThreadID threadCreated, DebuggerNewThreadUPP userUPP) { (*userUPP)(threadCreated); } #else #define InvokeDebuggerNewThreadUPP(threadCreated, userUPP) (*userUPP)(threadCreated) #endif #endif /* * InvokeDebuggerDisposeThreadUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( void ) InvokeDebuggerDisposeThreadUPP( ThreadID threadDeleted, DebuggerDisposeThreadUPP userUPP); #if !OPAQUE_UPP_TYPES #ifdef __cplusplus inline DEFINE_API_C(void) InvokeDebuggerDisposeThreadUPP(ThreadID threadDeleted, DebuggerDisposeThreadUPP userUPP) { (*userUPP)(threadDeleted); } #else #define InvokeDebuggerDisposeThreadUPP(threadDeleted, userUPP) (*userUPP)(threadDeleted) #endif #endif /* * InvokeDebuggerThreadSchedulerUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API_C( ThreadID ) InvokeDebuggerThreadSchedulerUPP( SchedulerInfoRecPtr schedulerInfo, DebuggerThreadSchedulerUPP userUPP); #if !OPAQUE_UPP_TYPES #ifdef __cplusplus inline DEFINE_API_C(ThreadID) InvokeDebuggerThreadSchedulerUPP(SchedulerInfoRecPtr schedulerInfo, DebuggerThreadSchedulerUPP userUPP) { return (*userUPP)(schedulerInfo); } #else #define InvokeDebuggerThreadSchedulerUPP(schedulerInfo, userUPP) (*userUPP)(schedulerInfo) #endif #endif /* Thread Manager function pointers (TPP): on classic 68k use raw function pointers (same as UPP's) on classic PowerPC, use raw function pointers on classic PowerPC with OPAQUE_UPP_TYPES=1, use UPP's on CFM-68K, use UPP's on Carbon, use UPP's */ #if TARGET_OS_MAC && TARGET_CPU_PPC && !OPAQUE_UPP_TYPES /* use raw function pointers*/ typedef ThreadEntryProcPtr ThreadEntryTPP; typedef ThreadSchedulerProcPtr ThreadSchedulerTPP; typedef ThreadSwitchProcPtr ThreadSwitchTPP; typedef ThreadTerminationProcPtr ThreadTerminationTPP; typedef DebuggerNewThreadProcPtr DebuggerNewThreadTPP; typedef DebuggerDisposeThreadProcPtr DebuggerDisposeThreadTPP; typedef DebuggerThreadSchedulerProcPtr DebuggerThreadSchedulerTPP; #else /* use UPP's*/ typedef ThreadEntryUPP ThreadEntryTPP; typedef ThreadSchedulerUPP ThreadSchedulerTPP; typedef ThreadSwitchUPP ThreadSwitchTPP; typedef ThreadTerminationUPP ThreadTerminationTPP; typedef DebuggerNewThreadUPP DebuggerNewThreadTPP; typedef DebuggerDisposeThreadUPP DebuggerDisposeThreadTPP; typedef DebuggerThreadSchedulerUPP DebuggerThreadSchedulerTPP; #endif /* TARGET_OS_MAC && TARGET_CPU_PPC && !OPAQUE_UPP_TYPES */ /* * NewThread() * * Availability: * Non-Carbon CFM: in ThreadsLib 1.0 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSErr ) NewThread( ThreadStyle threadStyle, ThreadEntryTPP threadEntry, void * threadParam, Size stackSize, ThreadOptions options, void ** threadResult, /* can be NULL */ ThreadID * threadMade) THREEWORDINLINE(0x303C, 0x0E03, 0xABF2); /* * SetThreadScheduler() * * Availability: * Non-Carbon CFM: in ThreadsLib 1.0 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSErr ) SetThreadScheduler(ThreadSchedulerTPP threadScheduler) THREEWORDINLINE(0x303C, 0x0209, 0xABF2); /* * SetThreadSwitcher() * * Availability: * Non-Carbon CFM: in ThreadsLib 1.0 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSErr ) SetThreadSwitcher( ThreadID thread, ThreadSwitchTPP threadSwitcher, void * switchProcParam, Boolean inOrOut) THREEWORDINLINE(0x303C, 0x070A, 0xABF2); /* * SetThreadTerminator() * * Availability: * Non-Carbon CFM: in ThreadsLib 1.0 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSErr ) SetThreadTerminator( ThreadID thread, ThreadTerminationTPP threadTerminator, void * terminationProcParam) THREEWORDINLINE(0x303C, 0x0611, 0xABF2); /* * SetDebuggerNotificationProcs() * * Availability: * Non-Carbon CFM: in ThreadsLib 1.0 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSErr ) SetDebuggerNotificationProcs( DebuggerNewThreadTPP notifyNewThread, DebuggerDisposeThreadTPP notifyDisposeThread, DebuggerThreadSchedulerTPP notifyThreadScheduler) THREEWORDINLINE(0x303C, 0x060D, 0xABF2); /* * CreateThreadPool() * * Availability: * Non-Carbon CFM: in ThreadsLib 1.0 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSErr ) CreateThreadPool( ThreadStyle threadStyle, SInt16 numToCreate, Size stackSize) THREEWORDINLINE(0x303C, 0x0501, 0xABF2); /* * GetFreeThreadCount() * * Availability: * Non-Carbon CFM: in ThreadsLib 1.0 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSErr ) GetFreeThreadCount( ThreadStyle threadStyle, SInt16 * freeCount) THREEWORDINLINE(0x303C, 0x0402, 0xABF2); /* * GetSpecificFreeThreadCount() * * Availability: * Non-Carbon CFM: in ThreadsLib 1.0 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSErr ) GetSpecificFreeThreadCount( ThreadStyle threadStyle, Size stackSize, SInt16 * freeCount) THREEWORDINLINE(0x303C, 0x0615, 0xABF2); /* * GetDefaultThreadStackSize() * * Availability: * Non-Carbon CFM: in ThreadsLib 1.0 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSErr ) GetDefaultThreadStackSize( ThreadStyle threadStyle, Size * stackSize) THREEWORDINLINE(0x303C, 0x0413, 0xABF2); /* * ThreadCurrentStackSpace() * * Availability: * Non-Carbon CFM: in ThreadsLib 1.0 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSErr ) ThreadCurrentStackSpace( ThreadID thread, UInt32 * freeStack) THREEWORDINLINE(0x303C, 0x0414, 0xABF2); /* * DisposeThread() * * Availability: * Non-Carbon CFM: in ThreadsLib 1.0 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSErr ) DisposeThread( ThreadID threadToDump, void * threadResult, Boolean recycleThread) THREEWORDINLINE(0x303C, 0x0504, 0xABF2); /* * YieldToThread() * * Availability: * Non-Carbon CFM: in ThreadsLib 1.0 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSErr ) YieldToThread(ThreadID suggestedThread) THREEWORDINLINE(0x303C, 0x0205, 0xABF2); /* * YieldToAnyThread() * * Availability: * Non-Carbon CFM: in ThreadsLib 1.0 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSErr ) YieldToAnyThread(void) FOURWORDINLINE(0x42A7, 0x303C, 0x0205, 0xABF2); /* * [Mac]GetCurrentThread() * * Availability: * Non-Carbon CFM: in ThreadsLib 1.0 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ #if TARGET_OS_MAC #define MacGetCurrentThread GetCurrentThread #endif EXTERN_API( OSErr ) MacGetCurrentThread(ThreadID * currentThreadID) THREEWORDINLINE(0x303C, 0x0206, 0xABF2); /* * GetThreadState() * * Availability: * Non-Carbon CFM: in ThreadsLib 1.0 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSErr ) GetThreadState( ThreadID threadToGet, ThreadState * threadState) THREEWORDINLINE(0x303C, 0x0407, 0xABF2); /* * SetThreadState() * * Availability: * Non-Carbon CFM: in ThreadsLib 1.0 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSErr ) SetThreadState( ThreadID threadToSet, ThreadState newState, ThreadID suggestedThread) THREEWORDINLINE(0x303C, 0x0508, 0xABF2); /* * SetThreadStateEndCritical() * * Availability: * Non-Carbon CFM: in ThreadsLib 1.0 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSErr ) SetThreadStateEndCritical( ThreadID threadToSet, ThreadState newState, ThreadID suggestedThread) THREEWORDINLINE(0x303C, 0x0512, 0xABF2); /* * ThreadBeginCritical() * * Availability: * Non-Carbon CFM: in ThreadsLib 1.0 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSErr ) ThreadBeginCritical(void) THREEWORDINLINE(0x303C, 0x000B, 0xABF2); /* * ThreadEndCritical() * * Availability: * Non-Carbon CFM: in ThreadsLib 1.0 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSErr ) ThreadEndCritical(void) THREEWORDINLINE(0x303C, 0x000C, 0xABF2); /* * GetThreadCurrentTaskRef() * * Availability: * Non-Carbon CFM: in ThreadsLib 1.0 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSErr ) GetThreadCurrentTaskRef(ThreadTaskRef * threadTRef) THREEWORDINLINE(0x303C, 0x020E, 0xABF2); /* * GetThreadStateGivenTaskRef() * * Availability: * Non-Carbon CFM: in ThreadsLib 1.0 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSErr ) GetThreadStateGivenTaskRef( ThreadTaskRef threadTRef, ThreadID threadToGet, ThreadState * threadState) THREEWORDINLINE(0x303C, 0x060F, 0xABF2); /* * SetThreadReadyGivenTaskRef() * * Availability: * Non-Carbon CFM: in ThreadsLib 1.0 and later * CarbonLib: in CarbonLib 1.0 and later * Mac OS X: in version 10.0 and later */ EXTERN_API( OSErr ) SetThreadReadyGivenTaskRef( ThreadTaskRef threadTRef, ThreadID threadToSet) THREEWORDINLINE(0x303C, 0x0410, 0xABF2); #if PRAGMA_STRUCT_ALIGN #pragma options align=reset #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(pop) #elif PRAGMA_STRUCT_PACK #pragma pack() #endif #ifdef PRAGMA_IMPORT_OFF #pragma import off #elif PRAGMA_IMPORT #pragma import reset #endif #ifdef __cplusplus } #endif #endif /* __THREADS__ */