Ok, hier der Minimalcode, der das Problem zeigt:
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TPoll =
class(TThread)
private
{ Private declarations }
POnData : TNotifyEvent;
protected
constructor Create(OnData: TNotifyevent);
procedure Notify;
procedure Execute;
override;
end;
type
TForm1 =
class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
private
{ Private declarations }
i: integer;
P: TPoll;
procedure PData(Sender: TObject);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
constructor TPoll.Create(OnData: TNotifyevent);
begin
inherited Create(true);
Suspended:=false;
FreeOnTerminate:=true;
POnData:=OnData;
end;
procedure TPoll.Notify;
begin
if assigned(POnData)
then POnData(
nil);
end;
procedure TPoll.Execute;
begin
repeat
sleep(500);
Synchronize(Notify);
until terminated;
end;
procedure TForm1.PData(Sender: TObject);
begin
inc(i);
writeln('
data packet ',i);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
i:=0;
P:=TPoll.Create(PData);
end;
procedure TForm1.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
P.Terminate;
end;
end.
Das ist eine ganz normale Delphi7-Fensteranwendung mit einem Fenster (Form1, leer), wobei bei den Linkeroptionen "Generate Console Application" angeklickt sein muss.
Nach meinem Verständniss müsste alle 0,5s eine Zeile auf die Konsole ausgegeben werden. Solange die Maus sich nicht bewegt, bleibt der Thread allerdings unerklärlicherweise stehen und es kommt nix.
Hoffentlich ist die Kristallkugel jetzt überflüssig...