AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

WaitForSingleObject und Threads

Ein Thema von endeffects · begonnen am 28. Mai 2005 · letzter Beitrag vom 28. Mai 2005
Antwort Antwort
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#1

WaitForSingleObject und Threads

  Alt 28. Mai 2005, 12:08
Hallo,

ich erzeuge in einem Thread folgende while schleife:

Delphi-Quellcode:
      while not terminated do
      begin
        if output= true then
          break;
      end;
da der rückgabewert der methode output von äußeren faktoren
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
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: WaitForSingleObject und Threads

  Alt 28. Mai 2005, 12:14
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:
AndererThread.FreeOnTerminate := False;
WaitForSingleObject(AndererThread.Handle, DeinTimeout);
if not AndererThread.Terminated then
  AndererThread.Terminate;
AndererThread.Free;
Ungetestet, aber so sollte es prinzipiell gehen
  Mit Zitat antworten Zitat
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#3

Re: WaitForSingleObject und Threads

  Alt 28. Mai 2005, 12:16
nein ich möchte den thread nicht beenden,
lediglich die while schleife, der thread soll
dann noch weiter arbeiten
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#4

Re: WaitForSingleObject und Threads

  Alt 28. Mai 2005, 12:20
Dann verpass deinem Thread mit der Schleife eine Property "ShouldBreak" und mach es dann so:
Delphi-Quellcode:
WaitForSingleObject(AndererThread.Handle, DeinTimeout);
AndererThread.ShouldBreak := True;
Deine Thread-Schleife muss dann so aussehen:
Delphi-Quellcode:
while not terminated do
  begin
    if output or ShouldExit then
      break;
    end;
Ich hoff es hilft
  Mit Zitat antworten Zitat
endeffects

Registriert seit: 27. Jun 2004
450 Beiträge
 
#5

Re: WaitForSingleObject und Threads

  Alt 28. Mai 2005, 12:42
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:
    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;
die while schleife läuft zudem noch in einer for schleife,
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;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz