unit
Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TData =
record
value:integer;
end
;
type
TMyEvent =
procedure
(Sender:TObject;data:TData)
of
object
;
type
TForm1 =
class
(TForm)
Button1: TButton;
procedure
Button1Click(Sender: TObject);
private
procedure
OnSomething(Sender:TObject; data:TData);
public
end
;
type
TMyThread =
class
(TThread)
protected
procedure
Execute; override;
procedure
NotifySomething;
public
OnSomething : TMyEvent;
end
;
var
Form1: TForm1;
implementation
procedure
TForm1.Button1Click(Sender: TObject);
var
thread
:TMyThread;
begin
thread
:= TMyThread.Create(true);
thread
.OnSomething := OnSomething;
thread
.FreeOnTerminate := true;
thread
.Resume;
end
;
procedure
TForm1.OnSomething(Sender: TObject; data: TData);
begin
Caption :=
'Thread dobehl s hodnotou '
+ IntToStr(data.value);
end
;
procedure
TMyThread.Execute;
begin
inherited
;
sleep(
2000
);
Synchronize(NotifySomething);
end
;
procedure
TMyThread.NotifySomething;
var
data:TData;
begin
if
assigned(OnSomething)
then
begin
data.value := random(
100
);
OnSomething(self, data);
end
;
end
;
end
.
Syntax higlighted by Syntax highlighter, available at www.4ITDevelopers.net and www.JakNaWin.com