Threads.pas 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711
  1. {
  2. File: CarbonCore/Threads.h
  3. Contains: Thread Manager Interfaces.
  4. Version: CarbonCore-654.0.85~1
  5. Copyright: © 1991-2005 by Apple Computer, Inc., all rights reserved.
  6. Bugs?: For bug reports, consult the following page on
  7. the World Wide Web:
  8. http://www.freepascal.org/bugs.html
  9. }
  10. { Pascal Translation Updated: Peter N Lewis, <[email protected]>, November 2005 }
  11. {
  12. Modified for use with Free Pascal
  13. Version 200
  14. Please report any bugs to <[email protected]>
  15. }
  16. {$mode macpas}
  17. {$packenum 1}
  18. {$macro on}
  19. {$inline on}
  20. {$CALLING MWPASCAL}
  21. unit Threads;
  22. interface
  23. {$setc UNIVERSAL_INTERFACES_VERSION := $0342}
  24. {$setc GAP_INTERFACES_VERSION := $0200}
  25. {$ifc not defined USE_CFSTR_CONSTANT_MACROS}
  26. {$setc USE_CFSTR_CONSTANT_MACROS := TRUE}
  27. {$endc}
  28. {$ifc defined CPUPOWERPC and defined CPUI386}
  29. {$error Conflicting initial definitions for CPUPOWERPC and CPUI386}
  30. {$endc}
  31. {$ifc defined FPC_BIG_ENDIAN and defined FPC_LITTLE_ENDIAN}
  32. {$error Conflicting initial definitions for FPC_BIG_ENDIAN and FPC_LITTLE_ENDIAN}
  33. {$endc}
  34. {$ifc not defined __ppc__ and defined CPUPOWERPC}
  35. {$setc __ppc__ := 1}
  36. {$elsec}
  37. {$setc __ppc__ := 0}
  38. {$endc}
  39. {$ifc not defined __i386__ and defined CPUI386}
  40. {$setc __i386__ := 1}
  41. {$elsec}
  42. {$setc __i386__ := 0}
  43. {$endc}
  44. {$ifc defined __ppc__ and __ppc__ and defined __i386__ and __i386__}
  45. {$error Conflicting definitions for __ppc__ and __i386__}
  46. {$endc}
  47. {$ifc defined __ppc__ and __ppc__}
  48. {$setc TARGET_CPU_PPC := TRUE}
  49. {$setc TARGET_CPU_X86 := FALSE}
  50. {$elifc defined __i386__ and __i386__}
  51. {$setc TARGET_CPU_PPC := FALSE}
  52. {$setc TARGET_CPU_X86 := TRUE}
  53. {$elsec}
  54. {$error Neither __ppc__ nor __i386__ is defined.}
  55. {$endc}
  56. {$setc TARGET_CPU_PPC_64 := FALSE}
  57. {$ifc defined FPC_BIG_ENDIAN}
  58. {$setc TARGET_RT_BIG_ENDIAN := TRUE}
  59. {$setc TARGET_RT_LITTLE_ENDIAN := FALSE}
  60. {$elifc defined FPC_LITTLE_ENDIAN}
  61. {$setc TARGET_RT_BIG_ENDIAN := FALSE}
  62. {$setc TARGET_RT_LITTLE_ENDIAN := TRUE}
  63. {$elsec}
  64. {$error Neither FPC_BIG_ENDIAN nor FPC_LITTLE_ENDIAN are defined.}
  65. {$endc}
  66. {$setc ACCESSOR_CALLS_ARE_FUNCTIONS := TRUE}
  67. {$setc CALL_NOT_IN_CARBON := FALSE}
  68. {$setc OLDROUTINENAMES := FALSE}
  69. {$setc OPAQUE_TOOLBOX_STRUCTS := TRUE}
  70. {$setc OPAQUE_UPP_TYPES := TRUE}
  71. {$setc OTCARBONAPPLICATION := TRUE}
  72. {$setc OTKERNEL := FALSE}
  73. {$setc PM_USE_SESSION_APIS := TRUE}
  74. {$setc TARGET_API_MAC_CARBON := TRUE}
  75. {$setc TARGET_API_MAC_OS8 := FALSE}
  76. {$setc TARGET_API_MAC_OSX := TRUE}
  77. {$setc TARGET_CARBON := TRUE}
  78. {$setc TARGET_CPU_68K := FALSE}
  79. {$setc TARGET_CPU_MIPS := FALSE}
  80. {$setc TARGET_CPU_SPARC := FALSE}
  81. {$setc TARGET_OS_MAC := TRUE}
  82. {$setc TARGET_OS_UNIX := FALSE}
  83. {$setc TARGET_OS_WIN32 := FALSE}
  84. {$setc TARGET_RT_MAC_68881 := FALSE}
  85. {$setc TARGET_RT_MAC_CFM := FALSE}
  86. {$setc TARGET_RT_MAC_MACHO := TRUE}
  87. {$setc TYPED_FUNCTION_POINTERS := TRUE}
  88. {$setc TYPE_BOOL := FALSE}
  89. {$setc TYPE_EXTENDED := FALSE}
  90. {$setc TYPE_LONGLONG := TRUE}
  91. uses MacTypes,MixedMode,MacErrors;
  92. {$ALIGN MAC68K}
  93. { Thread states}
  94. type
  95. ThreadState = UInt16;
  96. const
  97. kReadyThreadState = 0;
  98. kStoppedThreadState = 1;
  99. kRunningThreadState = 2;
  100. { Error codes have been moved to Errors.(pah)}
  101. { Thread environment characteristics}
  102. type
  103. ThreadTaskRef = UnivPtr;
  104. { Thread characteristics}
  105. type
  106. ThreadStyle = UInt32;
  107. const
  108. kCooperativeThread = 1 shl 0;
  109. kPreemptiveThread = 1 shl 1;
  110. { Thread identifiers}
  111. type
  112. ThreadID = UInt32;
  113. const
  114. kNoThreadID = 0;
  115. kCurrentThreadID = 1;
  116. kApplicationThreadID = 2;
  117. { Options when creating a thread}
  118. type
  119. ThreadOptions = UInt32;
  120. const
  121. kNewSuspend = 1 shl 0;
  122. kUsePremadeThread = 1 shl 1;
  123. kCreateIfNeeded = 1 shl 2;
  124. kFPUNotNeeded = 1 shl 3;
  125. kExactMatchThread = 1 shl 4;
  126. { Information supplied to the custom scheduler}
  127. type
  128. SchedulerInfoRec = record
  129. InfoRecSize: UInt32;
  130. CurrentThreadID: ThreadID;
  131. SuggestedThreadID: ThreadID;
  132. InterruptedCoopThreadID: ThreadID;
  133. end;
  134. SchedulerInfoRecPtr = ^SchedulerInfoRec;
  135. {
  136. The following ProcPtrs cannot be interchanged with UniversalProcPtrs because
  137. of differences between 680x0 and PowerPC runtime architectures with regard to
  138. the implementation of the Thread Manager.
  139. }
  140. type
  141. voidPtr = Ptr;
  142. { Prototype for thread's entry (main) routine}
  143. type
  144. ThreadEntryProcPtr = function( threadParam: UnivPtr ): voidPtr;
  145. { Prototype for custom thread scheduler routine}
  146. type
  147. ThreadSchedulerProcPtr = function( schedulerInfo: SchedulerInfoRecPtr ): ThreadID;
  148. { Prototype for custom thread switcher routine}
  149. type
  150. ThreadSwitchProcPtr = procedure( threadBeingSwitched: ThreadID; switchProcParam: UnivPtr );
  151. { Prototype for thread termination notification routine}
  152. type
  153. ThreadTerminationProcPtr = procedure( threadTerminated: ThreadID; terminationProcParam: UnivPtr );
  154. { Prototype for debugger NewThread notification}
  155. type
  156. DebuggerNewThreadProcPtr = procedure( threadCreated: ThreadID );
  157. { Prototype for debugger DisposeThread notification}
  158. type
  159. DebuggerDisposeThreadProcPtr = procedure( threadDeleted: ThreadID );
  160. { Prototype for debugger schedule notification}
  161. type
  162. DebuggerThreadSchedulerProcPtr = function( schedulerInfo: SchedulerInfoRecPtr ): ThreadID;
  163. type
  164. ThreadEntryUPP = ThreadEntryProcPtr;
  165. ThreadSchedulerUPP = ThreadSchedulerProcPtr;
  166. ThreadSwitchUPP = ThreadSwitchProcPtr;
  167. ThreadTerminationUPP = ThreadTerminationProcPtr;
  168. DebuggerNewThreadUPP = DebuggerNewThreadProcPtr;
  169. DebuggerDisposeThreadUPP = DebuggerDisposeThreadProcPtr;
  170. DebuggerThreadSchedulerUPP = DebuggerThreadSchedulerProcPtr;
  171. {
  172. * NewThreadEntryUPP()
  173. *
  174. * Availability:
  175. * Mac OS X: in version 10.0 and later in CoreServices.framework
  176. * CarbonLib: in CarbonLib 1.0 and later
  177. * Non-Carbon CFM: available as macro/inline
  178. }
  179. function NewThreadEntryUPP( userRoutine: ThreadEntryProcPtr ): ThreadEntryUPP; external name '_NewThreadEntryUPP';
  180. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  181. {
  182. * NewThreadSchedulerUPP()
  183. *
  184. * Availability:
  185. * Mac OS X: in version 10.0 and later in CoreServices.framework
  186. * CarbonLib: in CarbonLib 1.0 and later
  187. * Non-Carbon CFM: available as macro/inline
  188. }
  189. function NewThreadSchedulerUPP( userRoutine: ThreadSchedulerProcPtr ): ThreadSchedulerUPP; external name '_NewThreadSchedulerUPP';
  190. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  191. {
  192. * NewThreadSwitchUPP()
  193. *
  194. * Availability:
  195. * Mac OS X: in version 10.0 and later in CoreServices.framework
  196. * CarbonLib: in CarbonLib 1.0 and later
  197. * Non-Carbon CFM: available as macro/inline
  198. }
  199. function NewThreadSwitchUPP( userRoutine: ThreadSwitchProcPtr ): ThreadSwitchUPP; external name '_NewThreadSwitchUPP';
  200. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  201. {
  202. * NewThreadTerminationUPP()
  203. *
  204. * Availability:
  205. * Mac OS X: in version 10.0 and later in CoreServices.framework
  206. * CarbonLib: in CarbonLib 1.0 and later
  207. * Non-Carbon CFM: available as macro/inline
  208. }
  209. function NewThreadTerminationUPP( userRoutine: ThreadTerminationProcPtr ): ThreadTerminationUPP; external name '_NewThreadTerminationUPP';
  210. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  211. {
  212. * NewDebuggerNewThreadUPP()
  213. *
  214. * Availability:
  215. * Mac OS X: in version 10.0 and later in CoreServices.framework
  216. * CarbonLib: in CarbonLib 1.0 and later
  217. * Non-Carbon CFM: available as macro/inline
  218. }
  219. function NewDebuggerNewThreadUPP( userRoutine: DebuggerNewThreadProcPtr ): DebuggerNewThreadUPP; external name '_NewDebuggerNewThreadUPP';
  220. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  221. {
  222. * NewDebuggerDisposeThreadUPP()
  223. *
  224. * Availability:
  225. * Mac OS X: in version 10.0 and later in CoreServices.framework
  226. * CarbonLib: in CarbonLib 1.0 and later
  227. * Non-Carbon CFM: available as macro/inline
  228. }
  229. function NewDebuggerDisposeThreadUPP( userRoutine: DebuggerDisposeThreadProcPtr ): DebuggerDisposeThreadUPP; external name '_NewDebuggerDisposeThreadUPP';
  230. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  231. {
  232. * NewDebuggerThreadSchedulerUPP()
  233. *
  234. * Availability:
  235. * Mac OS X: in version 10.0 and later in CoreServices.framework
  236. * CarbonLib: in CarbonLib 1.0 and later
  237. * Non-Carbon CFM: available as macro/inline
  238. }
  239. function NewDebuggerThreadSchedulerUPP( userRoutine: DebuggerThreadSchedulerProcPtr ): DebuggerThreadSchedulerUPP; external name '_NewDebuggerThreadSchedulerUPP';
  240. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  241. {
  242. * DisposeThreadEntryUPP()
  243. *
  244. * Availability:
  245. * Mac OS X: in version 10.0 and later in CoreServices.framework
  246. * CarbonLib: in CarbonLib 1.0 and later
  247. * Non-Carbon CFM: available as macro/inline
  248. }
  249. procedure DisposeThreadEntryUPP( userUPP: ThreadEntryUPP ); external name '_DisposeThreadEntryUPP';
  250. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  251. {
  252. * DisposeThreadSchedulerUPP()
  253. *
  254. * Availability:
  255. * Mac OS X: in version 10.0 and later in CoreServices.framework
  256. * CarbonLib: in CarbonLib 1.0 and later
  257. * Non-Carbon CFM: available as macro/inline
  258. }
  259. procedure DisposeThreadSchedulerUPP( userUPP: ThreadSchedulerUPP ); external name '_DisposeThreadSchedulerUPP';
  260. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  261. {
  262. * DisposeThreadSwitchUPP()
  263. *
  264. * Availability:
  265. * Mac OS X: in version 10.0 and later in CoreServices.framework
  266. * CarbonLib: in CarbonLib 1.0 and later
  267. * Non-Carbon CFM: available as macro/inline
  268. }
  269. procedure DisposeThreadSwitchUPP( userUPP: ThreadSwitchUPP ); external name '_DisposeThreadSwitchUPP';
  270. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  271. {
  272. * DisposeThreadTerminationUPP()
  273. *
  274. * Availability:
  275. * Mac OS X: in version 10.0 and later in CoreServices.framework
  276. * CarbonLib: in CarbonLib 1.0 and later
  277. * Non-Carbon CFM: available as macro/inline
  278. }
  279. procedure DisposeThreadTerminationUPP( userUPP: ThreadTerminationUPP ); external name '_DisposeThreadTerminationUPP';
  280. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  281. {
  282. * DisposeDebuggerNewThreadUPP()
  283. *
  284. * Availability:
  285. * Mac OS X: in version 10.0 and later in CoreServices.framework
  286. * CarbonLib: in CarbonLib 1.0 and later
  287. * Non-Carbon CFM: available as macro/inline
  288. }
  289. procedure DisposeDebuggerNewThreadUPP( userUPP: DebuggerNewThreadUPP ); external name '_DisposeDebuggerNewThreadUPP';
  290. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  291. {
  292. * DisposeDebuggerDisposeThreadUPP()
  293. *
  294. * Availability:
  295. * Mac OS X: in version 10.0 and later in CoreServices.framework
  296. * CarbonLib: in CarbonLib 1.0 and later
  297. * Non-Carbon CFM: available as macro/inline
  298. }
  299. procedure DisposeDebuggerDisposeThreadUPP( userUPP: DebuggerDisposeThreadUPP ); external name '_DisposeDebuggerDisposeThreadUPP';
  300. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  301. {
  302. * DisposeDebuggerThreadSchedulerUPP()
  303. *
  304. * Availability:
  305. * Mac OS X: in version 10.0 and later in CoreServices.framework
  306. * CarbonLib: in CarbonLib 1.0 and later
  307. * Non-Carbon CFM: available as macro/inline
  308. }
  309. procedure DisposeDebuggerThreadSchedulerUPP( userUPP: DebuggerThreadSchedulerUPP ); external name '_DisposeDebuggerThreadSchedulerUPP';
  310. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  311. {
  312. * InvokeThreadEntryUPP()
  313. *
  314. * Availability:
  315. * Mac OS X: in version 10.0 and later in CoreServices.framework
  316. * CarbonLib: in CarbonLib 1.0 and later
  317. * Non-Carbon CFM: available as macro/inline
  318. }
  319. function InvokeThreadEntryUPP( threadParam: UnivPtr; userUPP: ThreadEntryUPP ): voidPtr; external name '_InvokeThreadEntryUPP';
  320. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  321. {
  322. * InvokeThreadSchedulerUPP()
  323. *
  324. * Availability:
  325. * Mac OS X: in version 10.0 and later in CoreServices.framework
  326. * CarbonLib: in CarbonLib 1.0 and later
  327. * Non-Carbon CFM: available as macro/inline
  328. }
  329. function InvokeThreadSchedulerUPP( schedulerInfo: SchedulerInfoRecPtr; userUPP: ThreadSchedulerUPP ): ThreadID; external name '_InvokeThreadSchedulerUPP';
  330. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  331. {
  332. * InvokeThreadSwitchUPP()
  333. *
  334. * Availability:
  335. * Mac OS X: in version 10.0 and later in CoreServices.framework
  336. * CarbonLib: in CarbonLib 1.0 and later
  337. * Non-Carbon CFM: available as macro/inline
  338. }
  339. procedure InvokeThreadSwitchUPP( threadBeingSwitched: ThreadID; switchProcParam: UnivPtr; userUPP: ThreadSwitchUPP ); external name '_InvokeThreadSwitchUPP';
  340. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  341. {
  342. * InvokeThreadTerminationUPP()
  343. *
  344. * Availability:
  345. * Mac OS X: in version 10.0 and later in CoreServices.framework
  346. * CarbonLib: in CarbonLib 1.0 and later
  347. * Non-Carbon CFM: available as macro/inline
  348. }
  349. procedure InvokeThreadTerminationUPP( threadTerminated: ThreadID; terminationProcParam: UnivPtr; userUPP: ThreadTerminationUPP ); external name '_InvokeThreadTerminationUPP';
  350. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  351. {
  352. * InvokeDebuggerNewThreadUPP()
  353. *
  354. * Availability:
  355. * Mac OS X: in version 10.0 and later in CoreServices.framework
  356. * CarbonLib: in CarbonLib 1.0 and later
  357. * Non-Carbon CFM: available as macro/inline
  358. }
  359. procedure InvokeDebuggerNewThreadUPP( threadCreated: ThreadID; userUPP: DebuggerNewThreadUPP ); external name '_InvokeDebuggerNewThreadUPP';
  360. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  361. {
  362. * InvokeDebuggerDisposeThreadUPP()
  363. *
  364. * Availability:
  365. * Mac OS X: in version 10.0 and later in CoreServices.framework
  366. * CarbonLib: in CarbonLib 1.0 and later
  367. * Non-Carbon CFM: available as macro/inline
  368. }
  369. procedure InvokeDebuggerDisposeThreadUPP( threadDeleted: ThreadID; userUPP: DebuggerDisposeThreadUPP ); external name '_InvokeDebuggerDisposeThreadUPP';
  370. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  371. {
  372. * InvokeDebuggerThreadSchedulerUPP()
  373. *
  374. * Availability:
  375. * Mac OS X: in version 10.0 and later in CoreServices.framework
  376. * CarbonLib: in CarbonLib 1.0 and later
  377. * Non-Carbon CFM: available as macro/inline
  378. }
  379. function InvokeDebuggerThreadSchedulerUPP( schedulerInfo: SchedulerInfoRecPtr; userUPP: DebuggerThreadSchedulerUPP ): ThreadID; external name '_InvokeDebuggerThreadSchedulerUPP';
  380. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  381. {
  382. Thread Manager function pointers (TPP):
  383. on classic 68k use raw function pointers (same as UPP's)
  384. on classic PowerPC, use raw function pointers
  385. on classic PowerPC with OPAQUE_UPP_TYPES=1, use UPP's
  386. on CFM-68K, use UPP's
  387. on Carbon, use UPP's
  388. }
  389. { use UPP's}
  390. type
  391. ThreadEntryTPP = ThreadEntryUPP;
  392. ThreadSchedulerTPP = ThreadSchedulerUPP;
  393. ThreadSwitchTPP = ThreadSwitchUPP;
  394. ThreadTerminationTPP = ThreadTerminationUPP;
  395. DebuggerNewThreadTPP = DebuggerNewThreadUPP;
  396. DebuggerDisposeThreadTPP = DebuggerDisposeThreadUPP;
  397. DebuggerThreadSchedulerTPP = DebuggerThreadSchedulerUPP;
  398. {
  399. * NewThread()
  400. *
  401. * Availability:
  402. * Mac OS X: in version 10.0 and later in CoreServices.framework
  403. * CarbonLib: in CarbonLib 1.0 and later
  404. * Non-Carbon CFM: in ThreadsLib 1.0 and later
  405. }
  406. function NewThread( threadStyle_: ThreadStyle; threadEntry: ThreadEntryTPP; threadParam: UnivPtr; stackSize: Size; options: ThreadOptions; threadResult: UnivPtrPtr { can be NULL }; var threadMade: ThreadID ): OSErr; external name '_NewThread';
  407. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  408. {
  409. * SetThreadScheduler()
  410. *
  411. * Availability:
  412. * Mac OS X: in version 10.0 and later in CoreServices.framework
  413. * CarbonLib: in CarbonLib 1.0 and later
  414. * Non-Carbon CFM: in ThreadsLib 1.0 and later
  415. }
  416. function SetThreadScheduler( threadScheduler: ThreadSchedulerTPP ): OSErr; external name '_SetThreadScheduler';
  417. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  418. {
  419. * SetThreadSwitcher()
  420. *
  421. * Availability:
  422. * Mac OS X: in version 10.0 and later in CoreServices.framework
  423. * CarbonLib: in CarbonLib 1.0 and later
  424. * Non-Carbon CFM: in ThreadsLib 1.0 and later
  425. }
  426. function SetThreadSwitcher( thread: ThreadID; threadSwitcher: ThreadSwitchTPP; switchProcParam: UnivPtr; inOrOut: Boolean ): OSErr; external name '_SetThreadSwitcher';
  427. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  428. {
  429. * SetThreadTerminator()
  430. *
  431. * Availability:
  432. * Mac OS X: in version 10.0 and later in CoreServices.framework
  433. * CarbonLib: in CarbonLib 1.0 and later
  434. * Non-Carbon CFM: in ThreadsLib 1.0 and later
  435. }
  436. function SetThreadTerminator( thread: ThreadID; threadTerminator: ThreadTerminationTPP; terminationProcParam: UnivPtr ): OSErr; external name '_SetThreadTerminator';
  437. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  438. {
  439. * SetDebuggerNotificationProcs()
  440. *
  441. * Availability:
  442. * Mac OS X: in version 10.0 and later in CoreServices.framework
  443. * CarbonLib: in CarbonLib 1.0 and later
  444. * Non-Carbon CFM: in ThreadsLib 1.0 and later
  445. }
  446. function SetDebuggerNotificationProcs( notifyNewThread: DebuggerNewThreadTPP; notifyDisposeThread: DebuggerDisposeThreadTPP; notifyThreadScheduler: DebuggerThreadSchedulerTPP ): OSErr; external name '_SetDebuggerNotificationProcs';
  447. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  448. {
  449. * CreateThreadPool()
  450. *
  451. * Availability:
  452. * Mac OS X: in version 10.0 and later in CoreServices.framework
  453. * CarbonLib: in CarbonLib 1.0 and later
  454. * Non-Carbon CFM: in ThreadsLib 1.0 and later
  455. }
  456. function CreateThreadPool( threadStyle_: ThreadStyle; numToCreate: SInt16; stackSize: Size ): OSErr; external name '_CreateThreadPool';
  457. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  458. {
  459. * GetFreeThreadCount() *** DEPRECATED ***
  460. *
  461. * Availability:
  462. * Mac OS X: in version 10.0 and later in CoreServices.framework but deprecated in 10.3
  463. * CarbonLib: in CarbonLib 1.0 and later
  464. * Non-Carbon CFM: in ThreadsLib 1.0 and later
  465. }
  466. function GetFreeThreadCount( threadStyle_: ThreadStyle; var freeCount: SInt16 ): OSErr; external name '_GetFreeThreadCount';
  467. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_3 *)
  468. {
  469. * GetSpecificFreeThreadCount() *** DEPRECATED ***
  470. *
  471. * Availability:
  472. * Mac OS X: in version 10.0 and later in CoreServices.framework but deprecated in 10.3
  473. * CarbonLib: in CarbonLib 1.0 and later
  474. * Non-Carbon CFM: in ThreadsLib 1.0 and later
  475. }
  476. function GetSpecificFreeThreadCount( threadStyle_: ThreadStyle; stackSize: Size; var freeCount: SInt16 ): OSErr; external name '_GetSpecificFreeThreadCount';
  477. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_3 *)
  478. {
  479. * GetDefaultThreadStackSize()
  480. *
  481. * Availability:
  482. * Mac OS X: in version 10.0 and later in CoreServices.framework
  483. * CarbonLib: in CarbonLib 1.0 and later
  484. * Non-Carbon CFM: in ThreadsLib 1.0 and later
  485. }
  486. function GetDefaultThreadStackSize( threadStyle_: ThreadStyle; var stackSize: Size ): OSErr; external name '_GetDefaultThreadStackSize';
  487. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  488. {
  489. * ThreadCurrentStackSpace()
  490. *
  491. * Availability:
  492. * Mac OS X: in version 10.0 and later in CoreServices.framework
  493. * CarbonLib: in CarbonLib 1.0 and later
  494. * Non-Carbon CFM: in ThreadsLib 1.0 and later
  495. }
  496. function ThreadCurrentStackSpace( thread: ThreadID; var freeStack: UInt32 ): OSErr; external name '_ThreadCurrentStackSpace';
  497. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  498. {
  499. * DisposeThread()
  500. *
  501. * Availability:
  502. * Mac OS X: in version 10.0 and later in CoreServices.framework
  503. * CarbonLib: in CarbonLib 1.0 and later
  504. * Non-Carbon CFM: in ThreadsLib 1.0 and later
  505. }
  506. function DisposeThread( threadToDump: ThreadID; threadResult: UnivPtr; recycleThread: Boolean ): OSErr; external name '_DisposeThread';
  507. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  508. {
  509. * YieldToThread()
  510. *
  511. * Availability:
  512. * Mac OS X: in version 10.0 and later in CoreServices.framework
  513. * CarbonLib: in CarbonLib 1.0 and later
  514. * Non-Carbon CFM: in ThreadsLib 1.0 and later
  515. }
  516. function YieldToThread( suggestedThread: ThreadID ): OSErr; external name '_YieldToThread';
  517. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  518. {
  519. * YieldToAnyThread()
  520. *
  521. * Availability:
  522. * Mac OS X: in version 10.0 and later in CoreServices.framework
  523. * CarbonLib: in CarbonLib 1.0 and later
  524. * Non-Carbon CFM: in ThreadsLib 1.0 and later
  525. }
  526. function YieldToAnyThread: OSErr; external name '_YieldToAnyThread';
  527. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  528. {
  529. * [Mac]GetCurrentThread()
  530. *
  531. * Availability:
  532. * Mac OS X: in version 10.0 and later in CoreServices.framework
  533. * CarbonLib: in CarbonLib 1.0 and later
  534. * Non-Carbon CFM: in ThreadsLib 1.0 and later
  535. }
  536. function GetCurrentThread( var currentThreadID: ThreadID ): OSErr; external name '_GetCurrentThread';
  537. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  538. function MacGetCurrentThread( var currentThreadID: ThreadID ): OSErr; external name '_GetCurrentThread';
  539. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  540. {
  541. * GetThreadState()
  542. *
  543. * Availability:
  544. * Mac OS X: in version 10.0 and later in CoreServices.framework
  545. * CarbonLib: in CarbonLib 1.0 and later
  546. * Non-Carbon CFM: in ThreadsLib 1.0 and later
  547. }
  548. function GetThreadState( threadToGet: ThreadID; var threadState_: ThreadState ): OSErr; external name '_GetThreadState';
  549. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  550. {
  551. * SetThreadState()
  552. *
  553. * Availability:
  554. * Mac OS X: in version 10.0 and later in CoreServices.framework
  555. * CarbonLib: in CarbonLib 1.0 and later
  556. * Non-Carbon CFM: in ThreadsLib 1.0 and later
  557. }
  558. function SetThreadState( threadToSet: ThreadID; newState: ThreadState; suggestedThread: ThreadID ): OSErr; external name '_SetThreadState';
  559. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  560. {
  561. * SetThreadStateEndCritical()
  562. *
  563. * Availability:
  564. * Mac OS X: in version 10.0 and later in CoreServices.framework
  565. * CarbonLib: in CarbonLib 1.0 and later
  566. * Non-Carbon CFM: in ThreadsLib 1.0 and later
  567. }
  568. function SetThreadStateEndCritical( threadToSet: ThreadID; newState: ThreadState; suggestedThread: ThreadID ): OSErr; external name '_SetThreadStateEndCritical';
  569. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  570. {
  571. * ThreadBeginCritical()
  572. *
  573. * Availability:
  574. * Mac OS X: in version 10.0 and later in CoreServices.framework
  575. * CarbonLib: in CarbonLib 1.0 and later
  576. * Non-Carbon CFM: in ThreadsLib 1.0 and later
  577. }
  578. function ThreadBeginCritical: OSErr; external name '_ThreadBeginCritical';
  579. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  580. {
  581. * ThreadEndCritical()
  582. *
  583. * Availability:
  584. * Mac OS X: in version 10.0 and later in CoreServices.framework
  585. * CarbonLib: in CarbonLib 1.0 and later
  586. * Non-Carbon CFM: in ThreadsLib 1.0 and later
  587. }
  588. function ThreadEndCritical: OSErr; external name '_ThreadEndCritical';
  589. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  590. {
  591. * GetThreadCurrentTaskRef()
  592. *
  593. * Availability:
  594. * Mac OS X: in version 10.0 and later in CoreServices.framework
  595. * CarbonLib: in CarbonLib 1.0 and later
  596. * Non-Carbon CFM: in ThreadsLib 1.0 and later
  597. }
  598. function GetThreadCurrentTaskRef( var threadTRef: ThreadTaskRef ): OSErr; external name '_GetThreadCurrentTaskRef';
  599. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  600. {
  601. * GetThreadStateGivenTaskRef()
  602. *
  603. * Availability:
  604. * Mac OS X: in version 10.0 and later in CoreServices.framework
  605. * CarbonLib: in CarbonLib 1.0 and later
  606. * Non-Carbon CFM: in ThreadsLib 1.0 and later
  607. }
  608. function GetThreadStateGivenTaskRef( threadTRef: ThreadTaskRef; threadToGet: ThreadID; var threadState_: ThreadState ): OSErr; external name '_GetThreadStateGivenTaskRef';
  609. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  610. {
  611. * SetThreadReadyGivenTaskRef()
  612. *
  613. * Availability:
  614. * Mac OS X: in version 10.0 and later in CoreServices.framework
  615. * CarbonLib: in CarbonLib 1.0 and later
  616. * Non-Carbon CFM: in ThreadsLib 1.0 and later
  617. }
  618. function SetThreadReadyGivenTaskRef( threadTRef: ThreadTaskRef; threadToSet: ThreadID ): OSErr; external name '_SetThreadReadyGivenTaskRef';
  619. (* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER *)
  620. end.