Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Programm blockiert ganz Windows (https://www.delphipraxis.net/175533-programm-blockiert-ganz-windows.html)

Gruber_Hans_12345 29. Jun 2013 13:59

AW: Programm blockiert ganz Windows
 
Zitat:

Zitat von mkinzler (Beitrag 1220047)
Zitat:

Das Problem ist das ich in der Laderoutine vom Firebird keine Porcessmessages einbauen kann.....
Warum nicht?

Dann verwende Threads



weil das ja nur ein sql.open ist was die ganze arbeit macht....

mich störts ja nicht das mein programm einfriert - aber warum der ganze rechner....

mkinzler 29. Jun 2013 14:02

AW: Programm blockiert ganz Windows
 
Zitat:

mich störts ja nicht das mein programm einfriert - aber warum der ganze rechner....
Weil dein Programm den Prozessor auslastet.
Vielleicht sollte man die Abfage optimieren

Gruber_Hans_12345 29. Jun 2013 14:09

AW: Programm blockiert ganz Windows
 
Zitat:

Zitat von mkinzler (Beitrag 1220049)
Zitat:

mich störts ja nicht das mein programm einfriert - aber warum der ganze rechner....
Weil dein Programm den Prozessor auslastet.
Vielleicht sollte man die Abfage optimieren

Ja aber das Teil hat ja noch 3 andere ...

Bernhard Geyer 29. Jun 2013 14:13

AW: Programm blockiert ganz Windows
 
Zitat:

Zitat von mkinzler (Beitrag 1220049)
Zitat:

mich störts ja nicht das mein programm einfriert - aber warum der ganze rechner....
Weil dein Programm den Prozessor auslastet.

Wage ich zu bezweifeln.
Selbst die billigesten PCs (Netbooks) haben schon zwei Kerne. Der normal-PC hat 4-8 Kerne. Ein einfaches Programm dieser Art wird den Prozessor nicht auslasten können.

stahli 29. Jun 2013 15:31

AW: Programm blockiert ganz Windows
 
Einen Tipp habe ich nicht aber...

Ich kenne ein ähnliches Verhalten unter Win7 gelegentlich vom InternetExplorer bzw. beim öffnen mehrerer Register. Nach einigen Sekunden läuft es dann wieder.

Außerdem reagiert das System gelegentlich nicht mehr auf MouseOver und MouseClick (laufende Programme aber schon).
Es hilft dann der Affengriff und zwei Klicks auf abbrechen. Der erste bringt die Mauserkennung zurück, der zweite schließt die Systemebene.

EWeiss 30. Jun 2013 11:35

AW: Programm blockiert ganz Windows
 
Hier rumzurätzeln warum das so ist bringt einfach nichts.
Fakt ist jedoch wenn du anderen Prozessen nicht die möglichkeit gibst weiterarbeiten zu können
hält das System nun mal (scheinbar)an bis dein prozess beendet ist.
Das ist einfach ein schlechter Programmierstil.

Die lösung ist doch einfach.
Blockiere nicht die Prozesse anderer Awendungen und gut ist.
Kann ich nicht.. gibt es nicht.

Das hilft immer

Delphi-Quellcode:
procedure WinProcessMessages;
// Allow Windows to process other system messages
var
  ProcMsg: TMsg;
begin
  while PeekMessage(ProcMsg, 0, 0, 0, PM_REMOVE) do
  begin
    if (ProcMsg.message = WM_QUIT) then
      Exit;
    TranslateMessage(ProcMsg);
    DispatchMessage(ProcMsg);
  end;
end;
Wer also will dir verbieten dafür zu sorgen das andere prozesse ihren Dienst verrichten können
FireBird ? :lol:

gruss

Gruber_Hans_12345 1. Jul 2013 15:48

AW: Programm blockiert ganz Windows
 
mir war das einfach absolut neu, das wenn ich in mienem Programm die Message nicht verarbeite das dann alle anderen Programme dadurch in mittleidenschaft gezogen werden.

Aber das Problem, ist trotzdem ich habe leider auch Komponenten von mir, die einfach sehr sehr lange zum verarbeiten brauchen (zum Beispiel PivotTabellen, die rieseige Datenmengen verarbetien) und da kann ich nicht einfach rumwerklen im sourcecode, und dort ne message loop einbauen.
Genau so schwer wird es sein das in nen Thread auszulagern, da diese Komponente natürlich auch grafisch ist ... und die GUI braucht (die ja nicht thread sicher ist)

samso 1. Jul 2013 17:23

AW: Programm blockiert ganz Windows
 
Nach meiner Erfahrung treten solche Effekte unter Windows7 dann auf, wenn eine Komponente den Explorer nutzt, und eine Ereignisbehandlung länger dauert. Ein Beispiel ist der DateTimePicker. Wenn man hier in den OnChange-Event folgendes einhängt

Delphi-Quellcode:
procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
  Sleep(10000)
end;
dann hängt nach der Änderung des Datums der gesamte Desktop für 10s. Das liegt daran, dass der Explorer als zentrale Bedienoberfläche für 10s blockiert ist. Bei anderen Komponenten (z.B. TEdit) ist ein solches Verhalten nicht zu beobachten.

Luckie 1. Jul 2013 18:31

AW: Programm blockiert ganz Windows
 
Zitat:

Zitat von EWeiss (Beitrag 1220124)
Fakt ist jedoch wenn du anderen Prozessen nicht die möglichkeit gibst weiterarbeiten zu können

Das ist unmöglich. Es sei den du gibst deinen Prozess die höchste Priorität, so das alle anderen Prozesse vom Scheduler nicht mehr berücksichtigt werden.

Gruber_Hans_12345 1. Jul 2013 18:57

AW: Programm blockiert ganz Windows
 
Ja ist ein total komisches verhalten vom System

Und es ist total egal welche Priorität ich meinem Programm gebe - hohe oder niedrige - das hat keinen einfluss!

Wenn das programm sperrt, dann kann ich Alt-Tab drücken
es kommt das schöne fenster mit den Vorschaubildern der aktiven Programmen, aber es bleibt beim ersten Fenster stehen, also ein weiteres Alt-Tab geht nicht mehr
Die Vorschaubilder bleiben auch solange stehen bis mein programm fertig ist

Wenn ich im hintergrund bei einer anderen Anwendung was rumschreibe oder so, dann sehe ich das sogar in den kleinen Vorschaubildern automatisch refresht!


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:11 Uhr.
Seite 3 von 5     123 45      

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