AGB  ·  Datenschutz  ·  Impressum  







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

[Threads] auf Suspended warten

Ein Thema von sieppl · begonnen am 16. Sep 2004 · letzter Beitrag vom 20. Nov 2005
Antwort Antwort
Benutzerbild von sieppl
sieppl

Registriert seit: 15. Aug 2004
Ort: Münster
198 Beiträge
 
Delphi 7 Professional
 
#1

[Threads] auf Suspended warten

  Alt 16. Sep 2004, 14:20
Hallo,

wie kann ich in meine Hauptroutine warten bis ein Thread Suspended ist?
Ich setzte nämlich einen Bool im Thread auf True, dann wird der aktuelle
Arbeitsschritt zu Ende geführt und suspendiert sich danach selbst.
Wenn ich in der Hauptroutine ein
Delphi-Quellcode:
while not Thread.Suspended do
  Sleep(100);
mache, bekommt der thread anscheinend gar keine Rechenzeit mehr.
ALso am besten die Rechenzeit an den Thread abgeben.

Danke!

Sebastian
Sebastian
  Mit Zitat antworten Zitat
KrasserChecker

Registriert seit: 21. Jul 2004
120 Beiträge
 
#2

Re: Thread auf Supended warten

  Alt 16. Sep 2004, 14:38
Häh? Wo bleibt denn da der witz eines Threads?
Wenn Du im Hauptprogramm darauf wartest, dass der Thread mit etwas fertig ist, dann kannst Du es doch gleich im Hauptthread machen...?
  Mit Zitat antworten Zitat
Benutzerbild von sieppl
sieppl

Registriert seit: 15. Aug 2004
Ort: Münster
198 Beiträge
 
Delphi 7 Professional
 
#3

Re: Thread auf Supended warten

  Alt 16. Sep 2004, 14:39
Ich habe es jetzt mit einer Delay-Funktion gelöst. Wo liegt denn der Unterschied zwischen Delay und Sleep? Hier der Link zu einigen Möglichkeiten: Torry's Delphi Pages Delay Functions
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von sieppl
sieppl

Registriert seit: 15. Aug 2004
Ort: Münster
198 Beiträge
 
Delphi 7 Professional
 
#4

Re: Thread auf Supended warten

  Alt 16. Sep 2004, 14:42
Zitat von KrasserChecker:
Häh? Wo bleibt denn da der witz eines Threads?
Wenn Du im Hauptprogramm darauf wartest, dass der Thread mit etwas fertig ist, dann kannst Du es doch gleich im Hauptthread machen...?
der Thread erzeugt Thumbnails. Wenn ich nun während der Erzeugung den selben Ordner per Drag und Drop verschieben möchte, sollte ich zusehen, dass der Thread nicht mehr auf die Files zugreift..
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#5

Re: Thread auf Supended warten

  Alt 16. Sep 2004, 15:29
dass dein thread keuine rechenzeit bekommt könnte wohl am sleep liegen. denn das dient ja dazu dass der thread keine rechenzeit bekommt oder verstehe ich das problem falsch?
  Mit Zitat antworten Zitat
Benutzerbild von sieppl
sieppl

Registriert seit: 15. Aug 2004
Ort: Münster
198 Beiträge
 
Delphi 7 Professional
 
#6

Re: [Threads] auf Suspended warten

  Alt 16. Sep 2004, 22:08
ich denke auch, dass Sleep nicht nur den Hauptthread sondern auch alle anderen Threads lahmlegt. Delay finde ich nicht sehr elegant, funktioniert aber. Gibt es denn keinen richtigen Befehl, der Rechenzeit an Threads abgibt? So etwas wie WaitForSingleObject, aber für das Suspendieren..
Sebastian
  Mit Zitat antworten Zitat
asdfg
(Gast)

n/a Beiträge
 
#7

Re: [Threads] auf Suspended warten

  Alt 20. Nov 2005, 17:13
Zitat von sieppl:
ich denke auch, dass Sleep nicht nur den Hauptthread sondern auch alle anderen Threads lahmlegt. Delay finde ich nicht sehr elegant, funktioniert aber. Gibt es denn keinen richtigen Befehl, der Rechenzeit an Threads abgibt? So etwas wie WaitForSingleObject, aber für das Suspendieren..
Das könnte vllt. weiterhelfen:
http://www.delphicorner.f9.co.uk/articles/op1.htm
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#8

Re: [Threads] auf Suspended warten

  Alt 20. Nov 2005, 17:20
Rechenzeit wird mit Application.ProcessMessages freigegeben.

Aber bist du dir sicher, dass du auf ein Suspend warten möchtest? Sollte Suspend nicht durch den Hauptthread gesetzt werden um den Thread zu unterbrechen? Wenn du jedenfalls auf irgendwas wartest gibt es folgende Möglichkeiten

Delphi-Quellcode:
// Wartezeit ms warten und währenddessen Rechenzeit freigeben

var ticks : Int64;
begin
  ticks := GetTickCount;
  while not (GetTickCount - time) >= Wartezeit do
    begin
      Application.ProcessMessages;
    end;
end;

// Warten bis irgendeine Bedingung erfüllt ist
begin
  while not Bedingung do
    begin
      Application.ProcessMessages;
    end;
end
  Mit Zitat antworten Zitat
asdfg
(Gast)

n/a Beiträge
 
#9

Re: [Threads] auf Suspended warten

  Alt 20. Nov 2005, 17:26
Zitat von Der_Unwissende:
Rechenzeit wird mit Application.ProcessMessages freigegeben.

Aber bist du dir sicher, dass du auf ein Suspend warten möchtest? Sollte Suspend nicht durch den Hauptthread gesetzt werden um den Thread zu unterbrechen? Wenn du jedenfalls auf irgendwas wartest gibt es folgende Möglichkeiten

Delphi-Quellcode:
// Wartezeit ms warten und währenddessen Rechenzeit freigeben

var ticks : Int64;
begin
  ticks := GetTickCount;
  while not (GetTickCount - time) >= Wartezeit do
    begin
      Application.ProcessMessages;
    end;
end;

// Warten bis irgendeine Bedingung erfüllt ist
begin
  while not Bedingung do
    begin
      Application.ProcessMessages;
    end;
end
http://www.delphicorner.f9.co.uk/articles/op1.htm
Zitat:
it's totally inefficient. While Application.ProcessMessages allows a program to continue to receive and process messages it receives, it still eats up CPU time because all it's doing is yielding temporarily, then going back to its original state, meaning it constantly activates and deactives.
http://www.ibrtses.com/delphi/threads.html
Zitat:
Beside waiting for a TEvent, there are WaitForSingleObject and WaitforMultipleObjects

WaitForSingleObject allows waiting for a variety of events : ChangeNotification, ConsoleInput, Event, Mutex, Process termination, Semaphore, Thread termination, Timer.
WaitforSingleObject(Handle_of_the_object,timeout);
WaitforMultipleObjects can wait for a number of events at the same time. It is what the ADA 'select' statement does.
WaitForMultipleObjects(NumberOfEvents,PtrToHandleA rray,WaitAll,timeout);
man kann das doch mit WaitForSingleObject machen. dafür benötigt man einen Timeout. Kann man das Timeout berechnen oder deaktiveren
  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 12:23 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