Hallo,
ich möchte aus meiner Hauptanwendung heraus (einer Konsolenanwendung) einen Thread erzeugen und starten. Danach arbeitet die Hauptanwendung normal weiter, ohne jemals auf die Beendigung des Threads zu warten, d.h. der Thread macht seinen Job und beendet sich schließlich selbst.
Der Thread soll (in dem Hier gewählten Beispiel) einen Timer starten, der alle 100ms ein Event auslöst. Jedes mal wenn das Event ausgelöst wird, soll eine Ausgabe auf der Konsole gemacht werden.
Mein Problem bei der ganzen Sache ist, dass ich es nicht hinbekomme, dass der Thread das Event mitbekommt bzw. die Prozedur zur Behandlung des Events aufgerufen wird.
Ich weiß nicht mehr weiter. Vielen Dank für die Hilfe!
Veit
_//MyThread.pas_
**unit** MyThread;
**interface**
**uses**
Forms,
SysUtils,
ExtCtrls,
Classes;
**type**
TMethodPointer = record
pMethod: Pointer;
pObject: TObject;
**end;**
TMyThread = **class** (TThread)
**constructor** Create( CreateSuspended: Boolean );
**procedure** NotifyEvent(Sender: Tobject);
**private**
p : TMethodPointer;
t : TTimer;
**protected**
**procedure** Execute; **override** ;
**end** ;
**implementation**
**constructor** TMyThread.Create( CreateSuspended: Boolean );
**begin**
**inherited** Create( CreateSuspended );
p.pMethod := @TMyThread.NotifyEvent;
p.pObject := **nil** ;
t := TTimer.Create( **nil** );
t.Enabled := false; _//deaktiviert timer_
t.Interval := 100; _//alle 100ms ein OnTimerEvent_
t.OnTimer := TNotifyEvent(p); _//Prozedur dem OnTimerEvent zuordnen_
**end** ;
**procedure** TMyThread.NotifyEvent(Sender: TObject);
**begin**
writeln('Ja, event behandelt');
SysUtils.Beep;
**end** ;
**procedure** TMyThread.Execute;
**var**
i : integer;
**begin**
t.Enabled := true; _// aktiviert den Timer_
**for** i := 1 **to** 10 do **begin**
sleep(50);
writeln('warte auf event');
Application.ProcessMessages; _//eventliste abarbeiten :frowning:scheint nicht zu wirken)_
**end** ;
t.Enabled := false; _// deaktiviert den Timer_
**end** ;
**end**.