AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi [gelöst] SetPriorityClass: Idle ist nicht wirklich idle?
Thema durchsuchen
Ansicht
Themen-Optionen

[gelöst] SetPriorityClass: Idle ist nicht wirklich idle?

Ein Thema von dizzy · begonnen am 2. Aug 2005 · letzter Beitrag vom 2. Aug 2005
Antwort Antwort
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#1

[gelöst] SetPriorityClass: Idle ist nicht wirklich idle?

  Alt 2. Aug 2005, 14:19
Hallo!

Ich habe ein Progrämmchen geschrieben dass alle in einem Ordner befindlichen jpegs auf inhaltliche Ähnlichkeit überprüft und protokolliert. Da dies (weil ja jedes Bild gegen jedes andere geprüft werden muss) schon mal etwas länger dauern kann, schraube ich die Priotität runter. Ich hatte dies schon mal vor ein paar Monaten mit einem Thread gemacht, wobei ich aber arge Probleme mit der jpeg-Uhit bekam. Sie scheint nicht Threadsicher zu sein, und ich bekam reihenweise Fehler der Art "nicht genügend Arbeitsspeicher" (so ähnlich). Im Mainthread haben exakt die selben Funktionen tadellos funktioniert, und ich hatte auch keine Speicherlecks.
Nun, einige Zeit später, habe ich mich diesem Teil wieder gewidmet, und es diesmal mit "SetPriorityClass" probiert. Und siehe da: Keine Fehler! Jetzt das dicke aber was mich zu meiner Frage hier treibt: Selbst wenn der Prozess auf IDLE gesetzt ist verhält er sich nicht im geringsten so. Wenn ich z.B. nebenbei ein Framebased Spiel spiele dass in aller Regel 100% CPU einfordert, bollert mein Programm trotzdem im Hintergrund weiter und sorgt für reichlich Ruckelei. Ein Thread hingegen bleibt bei selben Bedingugen tatsächlich stehen. Wie bekomme ich dieses Verhalten für meinen ganzen Prozess?

Zum Nachvollziehen habe ich den Quelltext angehängt. Zum Kompilieren ist noch die Graphics32 erforderlich.

Besten Dank schon mal!
Fabian
Angehängte Dateien
Dateityp: zip jpeg_compare_110.zip (5,0 KB, 12x aufgerufen)
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#2

Re: SetPriotrityClass: Idle ist nicht wirklich idle?

  Alt 2. Aug 2005, 14:23
Die tatsächliche Priorität setzt sich aus der Basispriorität des Prozesses und der Priorität des Threads zusammen...
(die Fehler könnten auf die Verwendung von GDI-Funktionen zurückzuführen sein, die selbst nicht thread-sicher sind)
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#3

Re: SetPriotrityClass: Idle ist nicht wirklich idle?

  Alt 2. Aug 2005, 14:39
MSDN-Library durchsuchenSetThreadPriorityBoost und MSDN-Library durchsuchenSetThreadPriority schon erwogen?

Übrigens: im Titel ist ein Freibschäler ...
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: SetPriotrityClass: Idle ist nicht wirklich idle?

  Alt 2. Aug 2005, 15:01
Danke euch beiden! Das mit der GDI klingt sehr wahrscheinlich. Woher bekomme ich denn ein Handle auf meinen Mainthread? kann ich da einfach auch das Prozesshandle verwenden?

Zitat von Olli:
Übrigens: im Titel ist ein Freibschäler ...
thx, jetzt nicht mehr
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#5

Re: SetPriotrityClass: Idle ist nicht wirklich idle?

  Alt 2. Aug 2005, 15:04
Zitat von dizzy:
Danke euch beiden! Das mit der GDI klingt sehr wahrscheinlich. Woher bekomme ich denn ein Handle auf meinen Mainthread? kann ich da einfach auch das Prozesshandle verwenden?
Als Pseudohandle mit: MSDN-Library durchsuchenGetCurrentThread() oder kombiniert für ein echtes Handle: MSDN-Library durchsuchenGetCurrentThreadId() und MSDN-Library durchsuchenOpenThread().
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: SetPriorityClass: Idle ist nicht wirklich idle?

  Alt 2. Aug 2005, 15:23
GetCurrentThread reicht vollkommen aus. Problem gelöst, nun läuft's so wie ich mir das vorgestellt hab . Vielen Dank nochmals!
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  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 04:12 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