делаю кросплатворменную программу на FreePascal, которая в нескольких потоках должна что-то делать.
Проблема с выводом статистики
Если потоки просто делают writeln(Номер потока+текст сообщения) //С синхронизацией само собой
все вроде работает, только строки постоянно ползут вверх вперемешку от всех потоков.
Хотел искользово crt+gotoXY чтобы каждый поток выводил в своей строке, но ничего не выводится.
без потоков gotoXY и writeln выводит все нормально и в виндовс и скомпилированое под линукс работает нормально, а если к многопоточной программе просто подключить модуль crt, то все writeln просто выводят пустоту только курсор дергается.
uses RunThread;
var Threads:array of TRunThread;
i:Integer;
begin
setLength(Threads,10);
for i:=0 to 9 do
Threads[i]:=TRunThread.create(i+1);
Threads[0].WaitFor;
WriteLn;
end.
unit RunThread;
interface
uses cthreads, cmem, Classes, SysUtils;
type TRunThread=class(TThread)
Y:Integer;
procedure Execute; override;
constructor Create(aY:Integer);
procedure UpdateTime;
end;
implementation
constructor TRunThread.Create(aY:Integer);
begin
inherited Create(False);
Y:=aY;
end;
procedure TRunThread.Execute;
begin
while not Terminated do
begin
sleep(500+random(500));
Synchronize(@UpdateTime);
end;
end;
procedure TRunThread.UpdateTime;
var s:String;
Begin
DateTimeToString(s, 'dd/mm/yyyyy h:m:s.z', now);
Writeln(Y,':',s);
end;
end.
Вот так работает, а если добавить в uses crt для unit RunThread просто перестает выводить текст на екран.