Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 03, 2025 11:39

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Aug 11, 2010 22:47 
Offline
DGL Member

Registriert: So Dez 27, 2009 14:23
Beiträge: 45
Hallo,

ich habe von kollegen Feedbacks erhalten, die es hinweisen, dass meine OpenGL-Anwendung unter Vista immer wieder Problem auftritt (Not Responding). Deshalb habe ich jetzt Win7 installiert und sie ausprobiert.
Es läuft eigentlich unter XP alles wunderbar. Aber unter win7 steigt sofort die CPU-Auslastung auf 70% wenn ich die Anwendung starte. Desweiteren friert die Anwendung nach ein paar Sekunden, wenn Maus sich auf dem Anwendungsfester nicht bewegt. Nach ein paar Versuch habe ich festgestellt, dass das Problem genau bei OnIdle Eventhandler auftritt. Ich habe den Handler deaktiviert und anstatt dessen ein Timer eingestellt, um raus zu finden, ob ein Fehler in OpenGL-Code oder diesen EventHandler selbst dieses Problem verursacht. Das Ergebnis: es funktioniert einwandfrei genau wie unter XP (außer Geschwendigkeit und CPU-Auslastung - immer noch auf 70% was unter XP nicht mal 10% ist)

Jetzt ist die Frage, hat jemand schon mal dieses Problem kennengelernt? gibt es eine andere Möglichkeit bzw. alternative gegen IdleHandler ?


Zuletzt geändert von BawerPower am Do Aug 12, 2010 21:29, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Aug 12, 2010 09:02 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Zitat:
gibt es eine andere Möglichkeit bzw. alternative gegen IdleHandler ?

Code:
Done:= false;
repeat
  //rendern und so
  Application.ProcessMessages;
until Done;


wobei, das Problem hab ich noch nie gehabt. Weiß also nicht, ob diese Alternative was bringt.

mfg

sharkman


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Aug 12, 2010 12:39 
Offline
DGL Member

Registriert: So Dez 27, 2009 14:23
Beiträge: 45
Zitat:
Code:
Done:= false;
repeat
  //rendern und so
  Application.ProcessMessages;
until Done;

sharkman


Danke für schnelle Antwort. Das Problem besteht immer noch, nur CPU-Auslastung ist jetzt zwischen 50%-60%, und die Anwendung friert nicht nach paar Sekunden, sondern nach ein paar Minuten.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Aug 12, 2010 14:35 
Offline
DGL Member
Benutzeravatar

Registriert: Do Apr 09, 2009 12:51
Beiträge: 53
Programmiersprache: Lazarus
Das liegt nicht am IdleHandler, hantierst du mit Threads / hast du sonst noch irgendwelche zeitaufwändigen Sachen drin?
Evtl hilft auch ein Profiler.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Aug 12, 2010 19:40 
Offline
DGL Member

Registriert: So Dez 27, 2009 14:23
Beiträge: 45
mleyen hat geschrieben:
Das liegt nicht am IdleHandler, hantierst du mit Threads / hast du sonst noch irgendwelche zeitaufwändigen Sachen drin?
Evtl hilft auch ein Profiler.

klar, sind viele Threads drin, die sind komplett synchronisiert miteinander, und das Problem tritt schon beim User-Anmeldung auf, dh. bevor noch keine einzige Thread erstellt / ausgeführt wird.
Aufwendige-Code ist da sicher nicht, da erst nach dem Klick auf ein Button ganze Threads usw... im Einsatz sind.

Es ist mir auch was eingefallen. Nachdem Start, bewegt sich App-Fenster selbst ein mal in jede 30 sekunden (mal nach rechts dann wieder zürück:)) Nach dieser Bewegung kommt die Meldung), genau dasgleiche passiert im unteren Taskleiste, wo App-Symbol ist.

Das komische ist es, dass OpenGL wirklich weiter rendert, nur App-Fenster reagiert nicht mehr.
Wie gesagt wenn ich ein Timer nehme, funktiniert wieder das ganze, wenn ich sie in OnIdle ausführe passiert das.

Über die Empfehlung auf einer OpenSource-Profiler wäre ich auch dankbar.

Gruß


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Aug 12, 2010 21:33 
Offline
DGL Member

Registriert: So Dez 27, 2009 14:23
Beiträge: 45
so Leute, ich habe das Problem im IdleHandler so gelöst:
Zitat:
procedure TfrmMain.IdleHandler(Sender: TObject; var Done: Boolean);
var
msg : Windows.TMsg;
begin

if PeekMessage(msg, 0, 0, 0, PM_REMOVE) then begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
render();
Done:= false;

CPU-Auslastung hat sich jetzt auch beruhight. (zwischen 20% - 50%)

Gruß


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]