AGB  ·  Datenschutz  ·  Impressum  







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

Darstellungsproblem bei Programmausführung

Ein Thema von Piro · begonnen am 23. Okt 2005 · letzter Beitrag vom 24. Okt 2005
Antwort Antwort
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#1

Darstellungsproblem bei Programmausführung

  Alt 23. Okt 2005, 23:41
Moin,

ich habe ein Programm das 2 Dateien(900 Datensätze / 252.000 Datensätze) einliest. Diese Daten schreibe ich in Arrays und vergleiche sie.

Beim vergleich friert das Programm ein. Folgende Probleme entstehen.

1. Programm reagiert nicht mehr auf Tasteneingaben oder Mauseingaben sowie auf minimieren und maximieren, erst am Ende des Vergleiches.
2. Wechsel zu ein anderem Programm und dann zurück -> wird nicht aktiv und läßt sich anzeigen

Kennt einer das Problem bzw. weiß wie ich die Anzeige effektiv aktualisiere bzw. die Minimierung / Maximierung des Programmes nutzen kann?

Danke.
Sven
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#2

Re: Darstellungsproblem bei Programmausführung

  Alt 23. Okt 2005, 23:44
Machst du das in einer WHILE bzw FOR Schleife. Dann rufe gelegentlich Application.ProcessMessages...
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Darstellungsproblem bei Programmausführung

  Alt 24. Okt 2005, 00:06
Statt application.processmessages machen bei rechen- bzw. zeitintensiven Programmabläufen Threads mehr Sinn.
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Darstellungsproblem bei Programmausführung

  Alt 24. Okt 2005, 08:17
Moin,

danke für euere Antworten. Ich bearbeite die Dateien mit For-Schleifen. Da ich mit euren Vorschlägen noch nicht gearbeitet habe bzw. mir nicht so wirklich erklären kann, wie man damit umgeht, könnte ihr mir kurz den Sinn erklären zum Thema:

Application.ProcessMessages & Threads

Danke. Sven
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Darstellungsproblem bei Programmausführung

  Alt 24. Okt 2005, 08:32
Threads laufen parallel zu deinem Hauptprozess ab, ohne diesen zu stören. D.h. du kannst dein Programm weiterhin ganz normal bedienen, während im Hintergrund gearbeitet wird. Unter den Delphi Demos such mal nach SortThread o.ä., da ist ein schönes Beispiel dabei. in der hilfe findest Du auch einiges zu TThread.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Darstellungsproblem bei Programmausführung

  Alt 24. Okt 2005, 09:12
Zitat von daywalker299:
... könnte ihr mir kurz den Sinn erklären zum Thema:
Application.ProcessMessages ...
Hai Sven,

währen deine Schleife durchlaufen wird kommt dein Programm nicht dazu die Nachrichten "die es von Windows bekommt" zu verarbeiten.
Es kann also nicht auf ein verschieben des Fensters, Buttonsklicks oder sonst etwas reagieren. Selbst das neuzeichnen von Labels findet nicht stat.

Durch den Aufruf von Delphi-Referenz durchsuchenApplication.ProcessMessages zwingst Du dein Programm die Nachrichten abzuarbeiten und dann mit der Schleife weiter zu machen.
Hier mal drei Beispiele:
Delphi-Quellcode:
var
  start: cardinal;
  ende: cardinal;

// Ohne Application.ProcessMessages
// Bei mir ca 2000 ms
procedure TDemoForm.btn_Test1Click(Sender: TObject);
var
  ndx: integer;
begin
  start := GetTickCount;
  for ndx := 0 to 100000 do
  begin
    lbl_Counter.Caption := IntToStr(ndx);
  end;
  ende := GetTickCount;
  ShowMessageFmt('Zeit %d', [ende - start]);
end;

// Mit Application.ProcessMessages
// Bei mir ca. 12000 ms
procedure TDemoForm.btn_Test2Click(Sender: TObject);
var
  ndx: integer;
begin
  start := GetTickCount;
  for ndx := 0 to 100000 do
  begin
    lbl_Counter.Caption := IntToStr(ndx);
    Application.ProcessMessages;
  end;
  ende := GetTickCount;
  ShowMessageFmt('Zeit %d', [ende - start]);
end;

// Mit Application.ProcessMessages beil allen maxloop Durchläufen.
// Bei mir ca. 3500 ms
procedure TDemoForm.btn_Test3Click(Sender: TObject);
const
  maxloop = 10;
var
  ndx: integer;
  lcount: integer;
begin
  start := GetTickCount;
  lcount := maxloop;
  for ndx := 0 to 100000 do
  begin
    lbl_Counter.Caption := IntToStr(ndx);
    Dec(lcount);
    if (lcount = 0) then
    begin
      Application.ProcessMessages;
      lcount := maxloop;
    end;
  end;
  ende := GetTickCount;
  ShowMessageFmt('Zeit %d', [ende - start]);
end;
Wie man an den Zeiten sieht ist es aber nicht unbedingt klug ProcessMessages bei jedem Durchlauf aufzurufen da natürlich auch die Abarbeitung der Methode einiges an Zeit braucht.

Darum habe ich in Test3 einfach bestimmt das dies nur bei jedem zehnten Durchlauf passieren soll. Welchen Wert Du hier nimmst ist von deinem Anwendungsfall abhängig.

Ich hoffe es zeigt in etwas worum es geht.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Darstellungsproblem bei Programmausführung

  Alt 24. Okt 2005, 10:41
danke, das hilft mir weiter.

MfG
  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 16:17 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