47 #if PRAGMA_STRUCT_ALIGN
48 #pragma options align = mac68k
49 #elif PRAGMA_STRUCT_PACKPUSH
51 #elif PRAGMA_STRUCT_PACK
56 typedef UInt16 ThreadState;
59 kReadyThreadState = 0,
60 kStoppedThreadState = 1,
61 kRunningThreadState = 2
67 typedef void *ThreadTaskRef;
69 typedef UInt32 ThreadStyle;
72 kCooperativeThread = 1L << 0,
73 kPreemptiveThread = 1L << 1
77 typedef UInt32 ThreadID;
82 kApplicationThreadID = 2
86 typedef UInt32 ThreadOptions;
89 kNewSuspend = (1 << 0),
90 kUsePremadeThread = (1 << 1),
91 kCreateIfNeeded = (1 << 2),
92 kFPUNotNeeded = (1 << 3),
93 kExactMatchThread = (1 << 4)
100 ThreadID CurrentThreadID;
101 ThreadID SuggestedThreadID;
102 ThreadID InterruptedCoopThreadID;
114 typedef CALLBACK_API(
voidPtr, ThreadEntryProcPtr)(
void *threadParam);
116 typedef CALLBACK_API(ThreadID,
119 typedef CALLBACK_API(
void, ThreadSwitchProcPtr)(ThreadID threadBeingSwitched,
120 void *switchProcParam);
122 typedef CALLBACK_API(
void,
123 ThreadTerminationProcPtr)(ThreadID threadTerminated,
124 void *terminationProcParam);
126 typedef CALLBACK_API(
void, DebuggerNewThreadProcPtr)(ThreadID threadCreated);
128 typedef CALLBACK_API(
void,
129 DebuggerDisposeThreadProcPtr)(ThreadID threadDeleted);
131 typedef CALLBACK_API(ThreadID, DebuggerThreadSchedulerProcPtr)(
133 typedef TVECTOR_UPP_TYPE(ThreadEntryProcPtr) ThreadEntryUPP;
134 typedef TVECTOR_UPP_TYPE(ThreadSchedulerProcPtr) ThreadSchedulerUPP;
135 typedef TVECTOR_UPP_TYPE(ThreadSwitchProcPtr) ThreadSwitchUPP;
136 typedef TVECTOR_UPP_TYPE(ThreadTerminationProcPtr) ThreadTerminationUPP;
137 typedef TVECTOR_UPP_TYPE(DebuggerNewThreadProcPtr) DebuggerNewThreadUPP;
138 typedef TVECTOR_UPP_TYPE(DebuggerDisposeThreadProcPtr) DebuggerDisposeThreadUPP;
139 typedef TVECTOR_UPP_TYPE(DebuggerThreadSchedulerProcPtr)
140 DebuggerThreadSchedulerUPP;
151 #if !OPAQUE_UPP_TYPES
154 uppThreadEntryProcInfo = 0x000000F0
162 #define NewThreadEntryUPP(userRoutine) (userRoutine)
176 #if !OPAQUE_UPP_TYPES
179 uppThreadSchedulerProcInfo = 0x000000F0
182 inline ThreadSchedulerUPP
188 #define NewThreadSchedulerUPP(userRoutine) (userRoutine)
202 #if !OPAQUE_UPP_TYPES
205 uppThreadSwitchProcInfo = 0x000003C0
213 #define NewThreadSwitchUPP(userRoutine) (userRoutine)
227 #if !OPAQUE_UPP_TYPES
230 uppThreadTerminationProcInfo = 0x000003C0
233 inline ThreadTerminationUPP
239 #define NewThreadTerminationUPP(userRoutine) (userRoutine)
253 #if !OPAQUE_UPP_TYPES
256 uppDebuggerNewThreadProcInfo = 0x000000C0
259 inline DebuggerNewThreadUPP
265 #define NewDebuggerNewThreadUPP(userRoutine) (userRoutine)
277 DebuggerDisposeThreadUPP
279 #if !OPAQUE_UPP_TYPES
282 uppDebuggerDisposeThreadProcInfo = 0x000000C0
285 inline DebuggerDisposeThreadUPP
291 #define NewDebuggerDisposeThreadUPP(userRoutine) (userRoutine)
303 DebuggerThreadSchedulerUPP
305 #if !OPAQUE_UPP_TYPES
308 uppDebuggerThreadSchedulerProcInfo = 0x000000F0
311 inline DebuggerThreadSchedulerUPP
317 #define NewDebuggerThreadSchedulerUPP(userRoutine) (userRoutine)
331 #if !OPAQUE_UPP_TYPES
335 #define DisposeThreadEntryUPP(userUPP)
349 #if !OPAQUE_UPP_TYPES
353 #define DisposeThreadSchedulerUPP(userUPP)
367 #if !OPAQUE_UPP_TYPES
371 #define DisposeThreadSwitchUPP(userUPP)
385 #if !OPAQUE_UPP_TYPES
389 #define DisposeThreadTerminationUPP(userUPP)
403 #if !OPAQUE_UPP_TYPES
407 #define DisposeDebuggerNewThreadUPP(userUPP)
421 #if !OPAQUE_UPP_TYPES
425 #define DisposeDebuggerDisposeThreadUPP(userUPP)
439 #if !OPAQUE_UPP_TYPES
443 #define DisposeDebuggerThreadSchedulerUPP(userUPP)
457 #if !OPAQUE_UPP_TYPES
461 return (*userUPP)(threadParam);
464 #define InvokeThreadEntryUPP(threadParam, userUPP) (*userUPP)(threadParam)
478 ThreadSchedulerUPP userUPP);
479 #if !OPAQUE_UPP_TYPES
482 ThreadSchedulerUPP userUPP)
484 return (*userUPP)(schedulerInfo);
487 #define InvokeThreadSchedulerUPP(schedulerInfo, userUPP) \
488 (*userUPP)(schedulerInfo)
502 ThreadSwitchUPP userUPP);
503 #if !OPAQUE_UPP_TYPES
506 void *switchProcParam,
507 ThreadSwitchUPP userUPP)
509 (*userUPP)(threadBeingSwitched, switchProcParam);
512 #define InvokeThreadSwitchUPP(threadBeingSwitched, switchProcParam, userUPP) \
513 (*userUPP)(threadBeingSwitched, switchProcParam)
527 void *terminationProcParam,
528 ThreadTerminationUPP userUPP);
529 #if !OPAQUE_UPP_TYPES
532 void *terminationProcParam,
533 ThreadTerminationUPP userUPP)
535 (*userUPP)(threadTerminated, terminationProcParam);
538 #define InvokeThreadTerminationUPP(threadTerminated, terminationProcParam, \
540 (*userUPP)(threadTerminated, terminationProcParam)
554 DebuggerNewThreadUPP userUPP);
555 #if !OPAQUE_UPP_TYPES
558 DebuggerNewThreadUPP userUPP)
560 (*userUPP)(threadCreated);
563 #define InvokeDebuggerNewThreadUPP(threadCreated, userUPP) \
564 (*userUPP)(threadCreated)
578 DebuggerDisposeThreadUPP userUPP);
579 #if !OPAQUE_UPP_TYPES
582 DebuggerDisposeThreadUPP userUPP)
584 (*userUPP)(threadDeleted);
587 #define InvokeDebuggerDisposeThreadUPP(threadDeleted, userUPP) \
588 (*userUPP)(threadDeleted)
602 DebuggerThreadSchedulerUPP userUPP);
603 #if !OPAQUE_UPP_TYPES
607 DebuggerThreadSchedulerUPP userUPP)
609 return (*userUPP)(schedulerInfo);
612 #define InvokeDebuggerThreadSchedulerUPP(schedulerInfo, userUPP) \
613 (*userUPP)(schedulerInfo)
626 #if TARGET_OS_MAC && TARGET_CPU_PPC && !OPAQUE_UPP_TYPES
629 typedef ThreadSchedulerProcPtr ThreadSchedulerTPP;
630 typedef ThreadSwitchProcPtr ThreadSwitchTPP;
631 typedef ThreadTerminationProcPtr ThreadTerminationTPP;
632 typedef DebuggerNewThreadProcPtr DebuggerNewThreadTPP;
633 typedef DebuggerDisposeThreadProcPtr DebuggerDisposeThreadTPP;
634 typedef DebuggerThreadSchedulerProcPtr DebuggerThreadSchedulerTPP;
638 typedef ThreadSchedulerUPP ThreadSchedulerTPP;
639 typedef ThreadSwitchUPP ThreadSwitchTPP;
640 typedef ThreadTerminationUPP ThreadTerminationTPP;
641 typedef DebuggerNewThreadUPP DebuggerNewThreadTPP;
642 typedef DebuggerDisposeThreadUPP DebuggerDisposeThreadTPP;
643 typedef DebuggerThreadSchedulerUPP DebuggerThreadSchedulerTPP;
656 void *threadParam, Size stackSize, ThreadOptions options,
658 ThreadID *threadMade);
681 void *switchProcParam,
Boolean inOrOut);
693 void *terminationProcParam);
705 DebuggerDisposeThreadTPP notifyDisposeThread,
706 DebuggerThreadSchedulerTPP notifyThreadScheduler);
806 #define MacGetCurrentThread GetCurrentThread
832 ThreadID suggestedThread);
844 ThreadID suggestedThread);
889 ThreadState *threadState);
902 #if PRAGMA_STRUCT_ALIGN
903 #pragma options align = reset
904 #elif PRAGMA_STRUCT_PACKPUSH
906 #elif PRAGMA_STRUCT_PACK
910 #ifdef PRAGMA_IMPORT_OFF
Basic Macintosh data types.
unsigned char Boolean
Definition: MacTypes.h:318
Mixed Mode Manager Interfaces.
OSErr SetThreadSwitcher(ThreadID thread, ThreadSwitchTPP threadSwitcher, void *switchProcParam, Boolean inOrOut)
OSErr SetDebuggerNotificationProcs(DebuggerNewThreadTPP notifyNewThread, DebuggerDisposeThreadTPP notifyDisposeThread, DebuggerThreadSchedulerTPP notifyThreadScheduler)
void DisposeThreadSwitchUPP(ThreadSwitchUPP userUPP)
ThreadID InvokeDebuggerThreadSchedulerUPP(SchedulerInfoRecPtr schedulerInfo, DebuggerThreadSchedulerUPP userUPP)
OSErr GetDefaultThreadStackSize(ThreadStyle threadStyle, Size *stackSize)
OSErr NewThread(ThreadStyle threadStyle, ThreadEntryTPP threadEntry, void *threadParam, Size stackSize, ThreadOptions options, void **threadResult, ThreadID *threadMade)
OSErr GetSpecificFreeThreadCount(ThreadStyle threadStyle, Size stackSize, SInt16 *freeCount)
ThreadSchedulerUPP NewThreadSchedulerUPP(ThreadSchedulerProcPtr userRoutine)
OSErr GetThreadStateGivenTaskRef(ThreadTaskRef threadTRef, ThreadID threadToGet, ThreadState *threadState)
DebuggerDisposeThreadUPP NewDebuggerDisposeThreadUPP(DebuggerDisposeThreadProcPtr userRoutine)
void DisposeDebuggerThreadSchedulerUPP(DebuggerThreadSchedulerUPP userUPP)
OSErr SetThreadState(ThreadID threadToSet, ThreadState newState, ThreadID suggestedThread)
void DisposeThreadSchedulerUPP(ThreadSchedulerUPP userUPP)
ThreadID InvokeThreadSchedulerUPP(SchedulerInfoRecPtr schedulerInfo, ThreadSchedulerUPP userUPP)
OSErr DisposeThread(ThreadID threadToDump, void *threadResult, Boolean recycleThread)
void DisposeThreadEntryUPP(ThreadEntryUPP userUPP)
ThreadSwitchUPP NewThreadSwitchUPP(ThreadSwitchProcPtr userRoutine)
OSErr SetThreadScheduler(ThreadSchedulerTPP threadScheduler)
OSErr SetThreadStateEndCritical(ThreadID threadToSet, ThreadState newState, ThreadID suggestedThread)
DebuggerThreadSchedulerUPP NewDebuggerThreadSchedulerUPP(DebuggerThreadSchedulerProcPtr userRoutine)
OSErr GetThreadState(ThreadID threadToGet, ThreadState *threadState)
OSErr ThreadEndCritical(void)
void DisposeDebuggerNewThreadUPP(DebuggerNewThreadUPP userUPP)
OSErr GetThreadCurrentTaskRef(ThreadTaskRef *threadTRef)
void DisposeDebuggerDisposeThreadUPP(DebuggerDisposeThreadUPP userUPP)
void DisposeThreadTerminationUPP(ThreadTerminationUPP userUPP)
OSErr CreateThreadPool(ThreadStyle threadStyle, SInt16 numToCreate, Size stackSize)
void InvokeDebuggerNewThreadUPP(ThreadID threadCreated, DebuggerNewThreadUPP userUPP)
OSErr ThreadBeginCritical(void)
OSErr ThreadCurrentStackSpace(ThreadID thread, UInt32 *freeStack)
void * voidPtr
Definition: Threads.h:112
OSErr GetFreeThreadCount(ThreadStyle threadStyle, SInt16 *freeCount)
DebuggerNewThreadUPP NewDebuggerNewThreadUPP(DebuggerNewThreadProcPtr userRoutine)
void InvokeDebuggerDisposeThreadUPP(ThreadID threadDeleted, DebuggerDisposeThreadUPP userUPP)
OSErr SetThreadReadyGivenTaskRef(ThreadTaskRef threadTRef, ThreadID threadToSet)
ThreadEntryUPP NewThreadEntryUPP(ThreadEntryProcPtr userRoutine)
void InvokeThreadSwitchUPP(ThreadID threadBeingSwitched, void *switchProcParam, ThreadSwitchUPP userUPP)
void InvokeThreadTerminationUPP(ThreadID threadTerminated, void *terminationProcParam, ThreadTerminationUPP userUPP)
OSErr YieldToAnyThread(void)
ThreadEntryUPP ThreadEntryTPP
Definition: Threads.h:637
OSErr SetThreadTerminator(ThreadID thread, ThreadTerminationTPP threadTerminator, void *terminationProcParam)
OSErr MacGetCurrentThread(ThreadID *currentThreadID)
OSErr YieldToThread(ThreadID suggestedThread)
voidPtr InvokeThreadEntryUPP(void *threadParam, ThreadEntryUPP userUPP)
ThreadTerminationUPP NewThreadTerminationUPP(ThreadTerminationProcPtr userRoutine)