Talk:Multithreaded Application Tutorial
var newStatus : string; begin fStatusText := 'TMyThread Starting...'; Synchronize(@Showstatus); fStatusText := 'TMyThread Running...';
this is a very good example of what you should NEVER do..
Showstatus will NEVER display the text 'TMyThread Starting...';
will show "TMyThread Running..." maybe twice ...
change your main-thread code to:
procedure TForm1.ShowStatus(Status: string); begin memo1.Lines.Add(Status); end;
and you will see what i mean..
second bad thing:
procedure TMyThread.ShowStatus; // this method is executed by the mainthread and can therefore access all GUI elements. begin if Assigned(FOnShowStatus) then begin FOnShowStatus(fStatusText); end; end;
as you can read: it is es executed by mainthread!!
you are accessing fStatusText from the mainthread and the thread (in worst case, at the same time, )
so using a critical section, would be good..