Zaczynam wątki w Delphi

0

Witam,

piszę troszkę bardziej rozbudowane programy i wiedziałem że prędzej czy później będę musiał zetknąć się z wątkami. Przeczytałem artykuł Adama Boducha o wątkach ale tak średnio go zrozumiałem. Napisałem prosty program do obsługi wątków wykorzystujący procedurę Sleep. Jak wiadomo, korzystanie z tej procedury bez pomocy wątków "zawiesza" aplikację na czas wykonania procedury,więc chciałem skorzystać z dobrodziejstwa wątku. Niestety w kodzie nie pokazuje się komunikat ShowMessage a gdy zamykam program, pokazuje się błąd krytyczny. Co robię źle? Oto kod całego modułu:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  TMojWatek = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  public
    constructor Create;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

constructor TMojWatek.Create;
begin
    inherited Create(False); //wywolanie watku
    FreeOnTerminate := True;
end;

procedure TMojWatek.Execute;
var
  i: integer;
begin

  for i := 1 to 5 do
  begin
     sleep(1000);
     ShowMessage('Pokazuje sie juz ' + IntToStr(i) + ' raz!');
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   TMojWatek.Create;
end;

end.
1

W wątkach nie można użyć za bardzo ShowMessage. O ile się orientuje musiał byś to zrobić przez Synchronize, ale najprościej będzie skorzystać z funkcji MessageBoxA/W. Coś więcej mogą Tobie doradzić jeszcze inni tutaj. Ja wątki jakoś ogarniam, ale przyznaje, że często robię pewne rzeczy jakby trochę na czuja. Ponieważ piszę na ogół dla siebie i jeśli u mnie działa coś ok, a ktoś kto ewentualnie ode mnie dostał mój program i jemu też działa prawidłowo. Nie zagłębiam się wtedy czy obsługa wątków jest perfekcyjnie zaprogramowana. A więcej o wątkach można doczytać też na tej stronie: http://lukashp.pl/Artykul/Programowanie/Delphi/delphi-watki

0

Dzięki @olesio, już ogarniam ten artykuł.

0

Zaczynam wątki w Delphi

Best temat ever.

Napisałem prosty program do obsługi wątków wykorzystujący procedurę Sleep. Jak wiadomo, korzystanie z tej procedury bez pomocy wątków "zawiesza" aplikację na czas wykonania procedury,więc chciałem skorzystać z dobrodziejstwa wątku.

sleep jest idealnym przykładem funkcji blokującej i tylko przykładem. Bo rzadko kiedy potrzeba wątków na dobrą sprawę, ale czasami jest to przydatne.

Niestety w kodzie nie pokazuje się komunikat ShowMessage a gdy zamykam program, pokazuje się błąd krytyczny. Co robię źle?

Nie czytasz tutoriali do końca.

Tut ode mnie: http://wiki.freepascal.org/Multithreaded_Application_Tutorial

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0