浏览代码

* Darwin TThreadID is a pointer
* BeginThread now returns a TThreadID instead of dword

git-svn-id: trunk@189 -

Jonas Maebe 20 年之前
父节点
当前提交
7ba46ce6f0
共有 7 个文件被更改,包括 21 次插入32 次删除
  1. 3 5
      rtl/bsd/sysosh.inc
  2. 1 1
      rtl/inc/system.inc
  3. 2 2
      rtl/inc/systemh.inc
  4. 5 14
      rtl/inc/thread.inc
  5. 5 5
      rtl/inc/threadh.inc
  6. 4 4
      rtl/unix/cthreads.pp
  7. 1 1
      rtl/unix/systhrd.inc

+ 3 - 5
rtl/bsd/sysosh.inc

@@ -20,12 +20,10 @@ type
   { fd are int in C also for 64bit targets (x86_64) }
   THandle = Longint;
 {$ifdef darwin}
-{$ifndef cpu64}
-  TThreadID = Longint;
-{$else cpu64}
-  TThreadID = int64;
+  TThreadID = pointer;
+{$else}
+  TThreadID = longint;
 {$endif}
-{$endif darwin}
   
   { pthread_mutex_t }
   PRTLCriticalSection = ^TRTLCriticalSection;

+ 1 - 1
rtl/inc/system.inc

@@ -554,7 +554,7 @@ Begin
   InOutRes:=0;
 End;
 
-Function GetThreadID:SizeUInt;{$ifdef SYSTEMINLINE}inline;{$endif}
+Function GetThreadID:TThreadID;{$ifdef SYSTEMINLINE}inline;{$endif}
 begin
 (* ThreadID is stored in a threadvar and made available in interface *)
 (* to allow setup of this value during thread initialization.        *)

+ 2 - 2
rtl/inc/systemh.inc

@@ -368,7 +368,7 @@ ThreadVar
 {$else SUPPORT_THREADVAR}
 Var
 {$endif SUPPORT_THREADVAR}
-  ThreadID    : SizeUInt;
+  ThreadID    : TThreadID;
   { Standard In- and Output }
   ErrOutput,
   Output,
@@ -655,7 +655,7 @@ function get_caller_frame(framebp:pointer):pointer;{$ifdef SYSTEMINLINE}inline;{
 Function IOResult:Word;{$ifdef SYSTEMINLINE}inline;{$endif}
 Function Sptr:Pointer;{$ifdef SYSTEMINLINE}inline;{$endif}{$ifdef INTERNCONSTINTF}[internconst:fpc_in_const_ptr];{$endif}
 Function GetProcessID:SizeUInt;
-Function GetThreadID:SizeUInt;
+Function GetThreadID:TThreadID;
 
 
 {*****************************************************************************

+ 5 - 14
rtl/inc/thread.inc

@@ -40,12 +40,8 @@ Var
 {*****************************************************************************
                             Overloaded functions
 *****************************************************************************}
-{$ifndef CPU64}
-{$ifndef unix}
-{$endif unix}
-{$endif CPU64}
 
-    function BeginThread(ThreadFunction : tthreadfunc) : DWord;
+    function BeginThread(ThreadFunction : tthreadfunc) : TThreadID;
       var
         dummy : TThreadID;
       begin
@@ -53,7 +49,7 @@ Var
       end;
 
 
-    function BeginThread(ThreadFunction : tthreadfunc;p : pointer) : DWord;
+    function BeginThread(ThreadFunction : tthreadfunc;p : pointer) : TThreadID;
       var
         dummy : TThreadID;
       begin
@@ -61,23 +57,18 @@ Var
       end;
 
 
-    function BeginThread(ThreadFunction : tthreadfunc;p : pointer;var ThreadId : TThreadID) : DWord;
+    function BeginThread(ThreadFunction : tthreadfunc;p : pointer;var ThreadId : TThreadID) : TThreadID;
       begin
         BeginThread:=BeginThread(nil,DefaultStackSize,ThreadFunction,p,0,ThreadId);
       end;
 
 
-{$ifndef CPU64}
-{$ifndef unix}
-{$endif unix}
-{$endif CPU64}
-
     procedure EndThread;
       begin
         EndThread(0);
       end;
 
-function BeginThread(sa : Pointer;stacksize : dword; ThreadFunction : tthreadfunc;p : pointer;creationFlags : dword;  var ThreadId : TThreadID) : DWord;
+function BeginThread(sa : Pointer;stacksize : dword; ThreadFunction : tthreadfunc;p : pointer;creationFlags : dword;  var ThreadId : TThreadID) : TThreadID;
 
 begin
   Result:=CurrentTM.BeginThread(sa,stacksize,threadfunction,P,creationflags,ThreadID);
@@ -293,7 +284,7 @@ end;
 
 function NoBeginThread(sa : Pointer;stacksize : dword;
                      ThreadFunction : tthreadfunc;p : pointer;
-                     creationFlags : dword; var ThreadId : TThreadID) : DWord;
+                     creationFlags : dword; var ThreadId : TThreadID) : TThreadID;
 begin
   NoThreadError;
 end;

+ 5 - 5
rtl/inc/threadh.inc

@@ -25,7 +25,7 @@ type
   trtlmethod  = procedure of object;
 
   // Function prototypes for TThreadManager Record.
-  TBeginThreadHandler = Function (sa : Pointer;stacksize : dword; ThreadFunction : tthreadfunc;p : pointer;creationFlags : dword; var ThreadId : TThreadID) : DWord;
+  TBeginThreadHandler = Function (sa : Pointer;stacksize : dword; ThreadFunction : tthreadfunc;p : pointer;creationFlags : dword; var ThreadId : TThreadID) : TThreadID;
   TEndThreadHandler = Procedure (ExitCode : DWord);
   // Used for Suspend/Resume/Kill
   TThreadHandler = Function (threadHandle : TThreadID) : dword;
@@ -107,13 +107,13 @@ procedure InitThread(stklen:cardinal);
 
 function BeginThread(sa : Pointer;stacksize : dword;
   ThreadFunction : tthreadfunc;p : pointer;creationFlags : dword;
-  var ThreadId : TThreadID) : DWord;
+  var ThreadId : TThreadID) : TThreadID;
 
 { add some simplfied forms which make lifer easier and porting }
 { to other OSes too ...                                        }
-function BeginThread(ThreadFunction : tthreadfunc) : DWord;
-function BeginThread(ThreadFunction : tthreadfunc;p : pointer) : DWord;
-function BeginThread(ThreadFunction : tthreadfunc;p : pointer; var ThreadId : TThreadID) : DWord;
+function BeginThread(ThreadFunction : tthreadfunc) : TThreadID;
+function BeginThread(ThreadFunction : tthreadfunc;p : pointer) : TThreadID;
+function BeginThread(ThreadFunction : tthreadfunc;p : pointer; var ThreadId : TThreadID) : TThreadID;
 
 procedure EndThread(ExitCode : DWord);
 procedure EndThread;

+ 4 - 4
rtl/unix/cthreads.pp

@@ -198,7 +198,7 @@ Type  PINTRTLEvent = ^TINTRTLEvent;
 
   function CBeginThread(sa : Pointer;stacksize : dword;
                        ThreadFunction : tthreadfunc;p : pointer;
-                       creationFlags : dword; var ThreadId : THandle) : DWord;
+                       creationFlags : dword; var ThreadId : TThreadId) : TThreadID;
     var
       ti : pthreadinfo;
       thread_attr : pthread_attr_t;
@@ -236,11 +236,11 @@ Type  PINTRTLEvent = ^TINTRTLEvent;
       // the newly created thread!
       //pthread_attr_setdetachstate(@thread_attr, PTHREAD_CREATE_DETACHED);
       if pthread_create(@threadid, @thread_attr, @ThreadMain,ti) <> 0 then begin
-        threadid := 0;
+        threadid := TThreadID(0);
       end;
       CBeginThread:=threadid;
 {$ifdef DEBUG_MT}
-      writeln('BeginThread returning ',CBeginThread);
+      writeln('BeginThread returning ',ptrint(CBeginThread));
 {$endif DEBUG_MT}
     end;
 
@@ -582,7 +582,7 @@ begin
 {$else}
   Result:=LoadPthreads;
 {$endif}
-  ThreadID := SizeUInt (pthread_self);
+  ThreadID := TThreadID (pthread_self);
 {$ifdef DEBUG_MT}
   Writeln('InitThreads : ',Result);
 {$endif DEBUG_MT}

+ 1 - 1
rtl/unix/systhrd.inc

@@ -18,7 +18,7 @@ Procedure InitSystemThreads;
 begin
   { This should be changed to a real value during
     thread driver initialization if appropriate. }
-  ThreadID := 1;
+  ThreadID := TThreadID(1);
   SetNoThreadManager;
 end;