Hi,<p>
über eine Schleife prüfe ich eine Vielzahl von Rechnern auf Verfügbarkeit. Da das etwas dauert, habe ich das Ganze in einen Thread ausgelagert, damit das Hauptprogramm bedienbar bleibt. Dazu habe ich die Idee von Andreas Kosch aus seinem Buch "Win32 Lösungen" aufgegriffen und initiiere am Anfang einen Thread, der sofort in den Suspend-Zustand übergeht.
<pre>
// Hauptprogramm
mythread := TMyThread.Create;
for i := 1 to RechnerAnzahl do
begin
...
mythread.Resume;
repeat
Sleep(0);
until mythread.Suspended;
...
end;
*
// Thread
constructor TMyThread.Create;
begin
inherited Create(True);
end;
*
procedure TMyThread.Execute;
begin
while not Terminated do
begin
...
Synchronize(WriteStatusbar);
if Ping(FClient) <> -1 then
...
Suspend;
end;
end;
</pre>
Mein Problem ist nun, dass die repeat-Schleife ewig durchlaufen wird. Scheinbar verabschiedet sich der Thread ins Nirwana ohne in den Suspend zu gehen. Was mache ich falsch?<p>
Reimund
über eine Schleife prüfe ich eine Vielzahl von Rechnern auf Verfügbarkeit. Da das etwas dauert, habe ich das Ganze in einen Thread ausgelagert, damit das Hauptprogramm bedienbar bleibt. Dazu habe ich die Idee von Andreas Kosch aus seinem Buch "Win32 Lösungen" aufgegriffen und initiiere am Anfang einen Thread, der sofort in den Suspend-Zustand übergeht.
<pre>
// Hauptprogramm
mythread := TMyThread.Create;
for i := 1 to RechnerAnzahl do
begin
...
mythread.Resume;
repeat
Sleep(0);
until mythread.Suspended;
...
end;
*
// Thread
constructor TMyThread.Create;
begin
inherited Create(True);
end;
*
procedure TMyThread.Execute;
begin
while not Terminated do
begin
...
Synchronize(WriteStatusbar);
if Ping(FClient) <> -1 then
...
Suspend;
end;
end;
</pre>
Mein Problem ist nun, dass die repeat-Schleife ewig durchlaufen wird. Scheinbar verabschiedet sich der Thread ins Nirwana ohne in den Suspend zu gehen. Was mache ich falsch?<p>
Reimund
Comment