[fpc-devel] StdOut capture for FPC RTL

Thaddy thaddy at thaddy.com
Fri Nov 26 03:06:21 CET 2010

On 25-11-2010 18:57, Jonas Maebe wrote:
> Actually, that won't work because the different threads will then work on a common buffer but with distinct pointers into it. A better solution is probably to do this in the intialisation code of each thread instead:
> {$ifdef unix}
>    fpclose(ttextrec(stdout).handle);
> {$elsif defined(MSWINDOWS)}
>    { this is a copy of do_close() from the rtl, I don't know whether
>      a new handle from a thread can actually have any of these values }
>    if (handle<>  StdInputHandle) and
>       (handle<>  StdOutputHandle) and
>       (handle<>  StdErrorHandle) then
>      CloseHandle(ttextrec(stdout).handle);
> {$else}
>    {$error Add support for this platform}
> {$endif}
> ttextrec(stdout).handle:=myglobalstdouthandle;
> Jonas_______________________________________________
This is the world upside down. Both for nixes and windows, you would 
expect the streams on a per process basis, not per thread, and handle 
possible contention by code.
i.e. it is - should be - expected that they work on a common 
buffer/pointer by definition.

More information about the fpc-devel mailing list