![]() |
WaitForSingleObject und Threads
Hallo,
ich erzeuge in einem Thread folgende while schleife:
Delphi-Quellcode:
da der rückgabewert der methode output von äußeren faktoren
while not terminated do
begin if output= true then break; end; abhängt ist es möglch das die while-schleife zu einer endlosschleife mutiert, darum wollte ich mit hilfe von WaitForSingleObject einen timeout in die while schleife basteln um diese nach ablauf verlassen zu können. könnte mir vielleicht jemand kurz erklären wie ich das am besten bewerkstellige? die geschichte mit dem thandle ist mir nämlich nicht so ganz klar |
Re: WaitForSingleObject und Threads
Verstehe ich das richtig, du willst deinen Thread laufen lassen und wenn er nach einer bestimmten Zeit noch nicht durchgelaufen ist, beenden?
Das machst du am besten in einem separaten Thread:
Delphi-Quellcode:
Ungetestet, aber so sollte es prinzipiell gehen ;)
AndererThread.FreeOnTerminate := False;
WaitForSingleObject(AndererThread.Handle, DeinTimeout); if not AndererThread.Terminated then AndererThread.Terminate; AndererThread.Free; |
Re: WaitForSingleObject und Threads
nein ich möchte den thread nicht beenden,
lediglich die while schleife, der thread soll dann noch weiter arbeiten :) |
Re: WaitForSingleObject und Threads
Dann verpass deinem Thread mit der Schleife eine Property "ShouldBreak" und mach es dann so:
Delphi-Quellcode:
Deine Thread-Schleife muss dann so aussehen:
WaitForSingleObject(AndererThread.Handle, DeinTimeout);
AndererThread.ShouldBreak := True;
Delphi-Quellcode:
Ich hoff es hilft ;)
while not terminated do
begin if output or ShouldExit then break; end; |
Re: WaitForSingleObject und Threads
hmm jain *g
also die threads werden im hauptthread in einem array erzeugt, ich weiß jetzt nicht so genau wie und welches handle ich übergeben soll //MainForm
Delphi-Quellcode:
die while schleife läuft zudem noch in einer for schleife,
for Loop:= 0 to length(ThreadArray) - 1 do
begin ThreadArray[Loop]:= TMyThreads.Create(true); ThreadArray[Loop].FIndex:= Loop; ThreadArray[Loop].Priority:= tpIdle; ThreadArray[Loop].FreeOnTerminate:= True; ThreadArray[Loop].Resume; end; wenn ich das nun halbwegs richtig verstanden habe müßte das dann ungefähr so aussehen: //TMyThreads = class(TThread)
Delphi-Quellcode:
for i:= 0 to ....
WaitForSingleObject(???, 30000); ???.ShouldExit := True; while not terminated do if output or ShouldExit then break; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz