You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
890 lines
27 KiB
890 lines
27 KiB
/* |
|
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 <MacTypes.h> |
|
#endif |
|
|
|
#ifndef __MIXEDMODE__ |
|
#include <MixedMode.h> |
|
#endif |
|
|
|
#ifndef __MACERRORS__ |
|
#include <MacErrors.h> |
|
#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__ */ |
|
|
|
|