[fpc-pascal] Re: writeln in threads on linux

Antal antal at componente.net
Sun Jul 2 12:32:04 CEST 2006


> Can anyone explain why i get output like this in a small test program:
> Inside Thread
> 		 Main Loop
> Inside Thread
> 		 Main Loop
> Inside Thread
> 		 Main Loop
That's because the line terminator!
#10#13 or #13#10 acts differently
So, check in the source code which one is used, because the first one is 
not suitable in Windows!
As you supposedly know, the end line terminator is different on Mac, Unix 
and Windows.
Mac only uses #13
Unix only uses #10
Windows uses #13#10 (CRLF)
This comes from the fact that telex machines needed to complete two 
different actions in order to start writing in a new line (just like what 
you have to do on a normal typewriter): first to step on the next row, 
then to put the head at the beginning of the row.
So, basically #10 means Line-Feed (LF) (step to the next row)
While #13 means Carriage Return (CR) which means "move the carriage -the 
printing head- to the beginning of the row) - or what you are doing on a 
typewriter by hand, using that lever from the right upper part of the 
machine.
so, when OS-es split up, the kept what they wanted, although MS had had to 
preserve the standard as long as they was part of IBM those times, and IBM 
telex machines needed the time of two caracter printing to complete a CRLF 
operation.
But I I've seen, sometimes in FP source codes the CRLF is using as LFCR 
which does nothing wrong on Unix, as long as CR is invisible, but on

So just look out for this in the source-code.
Or just use
write('Main Loop',#13#10);
:^)

>
>
> On Windows the output are lined up just as I would expect:
> Inside Thread
> Main Loop
> Inside Thread
> Main Loop
>
> Here's a snip of the code:
>
> // Main Prog
>
> Thr := threadtest.Create;
>
> Repeat
>  k := PollKeyEvent;
>  WriteLn('Mein Loop');
>  Sleep(100);
> Until k <> 0;
>
> And the ThreadTest.Execute i just:
>
> Procedure ThreadTest.Execute;
> Begin
>  Repeat
>    WriteLn('Inside Thread');
>    Sleep(100);
>  Until Terminated
> End;
>
>
> And if this is a "wrong way" of doing this thing, could someone tell me how
> it should be..
>
> Oh and BTW. Using FPC 2.1.1 snapshot from 14.06.06 (from Lazarus site), on
> OpenSuSe 10.1..



More information about the fpc-pascal mailing list