Difference between revisions of "Talk:Multithreaded Application Tutorial"

From Free Pascal wiki
(Removing all content from page)
Line 1: Line 1:
procedure TMyThread.Execute;
 
  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..
 

Revision as of 21:17, 25 January 2010