1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
// déclaration d'un objet THREAD
TMonThread=class(TThread)
Value:integer;
procedure Execute; override;
end;
// il nous faut une fiche avec un memo
TForm1 = class(TForm)
// ceci est créé automatiquement dans l'IDE
// 1) placer le memo
Memo1: TMemo;
// 2) cliquer 2 fois sur l'événement OnCreate de Form1
procedure FormCreate(Sender: TObject);
// 3) cliquer 2 fois sur l'événement OnDestroy de Form1
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
// la déclaration à la main
Thread:TMonThread;
procedure NouvelleValeur;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// comment se comporte le Thread ?
procedure TMonThread.Execute;
begin
// choix d'une valeur
Value:=123;
// l'afficher dans la fiche (ce qui nécessite une synchronisation des threads)
Synchronize(Form1.NouvelleValeur);
// attente façon Delay()
Sleep(2000);
// nouvelle valeur
Value:=456;
// etc...
Synchronize(Form1.NouvelleValeur);
Sleep(2000);
Value:=789;
Synchronize(Form1.NouvelleValeur);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
// lorsque la fiche est crée, on crée en même temps le Thread
Thread:=TMonThread.Create(False);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
// quand la fiche se termine, on termine le thread
Thread.Free;
end;
procedure TForm1.NouvelleValeur;
begin
// cette méthode est appelée périodiquement par le thread
// on se contente d'ajouter la valeur dans le memo, on pourrait
// tout aussi bien enregistrer la valeur dans un tableau et invoquer "Invalidate"
// pour que la fiche se redessine et sur le OnPaint, on dessine un graphe
Memo1.Lines.Add(IntToStr(Thread.Value));
end;
end. |
Partager