[fpc-pascal] GetThreadId, GetCurrentThreadId and MainThreadId

Vincent Snijders vsnijders at vodafonevast.nl
Tue Sep 8 14:02:46 CEST 2009


Hi,

While investigating http://bugs.freepascal.org/view.php?id=14335 I ran into the 
following peculiarities. Please, comment and tell for which item you want bug 
reports, if any. I tested on i386-linux.

1. The docs of GetThreadId seems to contain a typo:
http://lazarus-ccr.sourceforge.net/docs/rtl/system/getthreadid.html
"GetThreadID returns the current process ID." -> should be thread ID.

2. The docs of MainThreadID say it is unused. But it is used in TThread.Synchronize.
http://lazarus-ccr.sourceforge.net/docs/rtl/classes/mainthreadid.html

Given the following program:
program project1;

{$mode objfpc}{$H+}

uses
   //cthreads,
   Classes;

begin
   writeln('GetThreadID=', GetThreadID);
   writeln('GetCurrentThreadID=', GetCurrentThreadId);
   writeln('MainThreadID=', MainThreadID);
end.

3. If cthreads is not used, all values are 1. No problem with that, although I am 
not sure those are real thread id, at least on i386-win32 the value changes on each 
run, e.g. 1908, 576, maybe because threadmanager is already included in windows. 
Anyway, this is not a problem, as long as they all have the same value in a single 
threaded application

If cthreads is used, I get the following output:
GetThreadID=3084795456
GetCurrentThreadID=3085236992
MainThreadID=3085236992

4. What is the difference between GetThreadID and GetCurrentThreadID? This code runs 
in the same thread, so I expect the same value.

Vincent



More information about the fpc-pascal mailing list