Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi EINFACHSTES Delphi-Programm blockiert Betriebssystem (https://www.delphipraxis.net/105040-einfachstes-delphi-programm-blockiert-betriebssystem.html)

little-x 14. Dez 2007 14:23


EINFACHSTES Delphi-Programm blockiert Betriebssystem
 
Hi,

erstmal Entschuldigung für den reißerischen Titel..
Jawohl, ich wollte provozieren!

Spaß beiseite ich bin wirklich ratlos.
probiert mal folgendes... Neues Programm, 1 Button rein und dessen Klickevent folgenden Code zuweisen.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
// Kreiert nix weiter als eine Schleife, die ca. 30 Sekunden läuft.
        var    i: integer;
                j:     integer;
begin
        i:= 0;
        j:= 0;
        while i<100000000 do
        begin
                j:=0;
                while j<300 do // bei langsamen Systemen eben ein bisschen weniger.
                begin
                        inc(j);
                end;
                inc(i);
        end;
        showmessage('fertig');
end;
Wenn ich auf Button1 klicke, reagiert mein Programm für die Zeit des Schleifendurchlaufs nicht. Das ist ok.
Wenn ich aber mal mein Programm während der Zeit, in der die Schleife durchläuft, links liegen lasse und in Windows z.B.
Start->...->Office->Excel anklicke, dann verzögert sich der Start von Excel immer über 15 sekunden, manchmal sogar so lange bis die Schleife komplett durchlaufen ist.

Andere Programme wie z.B. Firefox starten problemlos.
Es kann doch nicht sein dass in einem Multitasking-System solche banalen Algoritmen den Rest des Systems beeinträchtigen können?!

Außerdem - Während der Zeit des Schleifendurchlaufs ist immer noch ein Leerlaufprozess da mit 30% CPU-Ressourcen, außerdem DualCore... Also kanns auch nicht am ausgelasteten CPU liegen.

Außerdem II - Während ich die Schleife debugge, ist die Prozessorauslastung überhaupt nicht merklich beeinträchtigt und das Problem besteht dennoch.

Weiß jemand Rat? Oder soll ich zu VisualBasic zurückgehen :lol: Dort passiert das nämlich nicht :roll: Da gibt's DoEvents.

PS: Ein System.ProcessMessages hilft nicht, auch kein System.HandleMessage. Gibt's da noch mehr?

Die Muhkuh 14. Dez 2007 14:26

Re: EINFACHSTES Delphi-Programm blockiert Betriebssystem
 
Was ich mich zuerst einmal Frage: Wofür um alles in der Welt brauchst Du so eine Schleife?

Adler 14. Dez 2007 14:31

Re: EINFACHSTES Delphi-Programm blockiert Betriebssystem
 
Und bei Delphi gibt es Application.ProcessMessages ...

generic 14. Dez 2007 14:34

Re: EINFACHSTES Delphi-Programm blockiert Betriebssystem
 
Ich denke, er möchte nur drauf Hinweisen das der Taskscheduler von Windows für Vordergrundprogramme
optimiert ist.

Ich denke er hat ein Server Taskscheduler erwartet, wo die Zeitverteilung effektiver läuft.

sirius 14. Dez 2007 14:38

Re: EINFACHSTES Delphi-Programm blockiert Betriebssystem
 
Aber wer das ständig über DoEvents bzw. Application.ProcessMessages oder ähnliches regelt, sollte vielleicht besser bei Basic bleiben :mrgreen:

SirThornberry 14. Dez 2007 14:44

Re: EINFACHSTES Delphi-Programm blockiert Betriebssystem
 
Zitat:

Zitat von generic
Ich denke, er möchte nur drauf Hinweisen das der Taskscheduler von Windows für Vordergrundprogramme
optimiert ist.

Ich denke er hat ein Server Taskscheduler erwartet, wo die Zeitverteilung effektiver läuft.

Das kann durcheis sein. Allerdings spricht dagegen das man das ja umstellen kann wenn es einem nicht gefällt.

little-x 14. Dez 2007 16:18

Re: EINFACHSTES Delphi-Programm blockiert Betriebssystem
 
Jetzt mal halblang.
Nicht immer alles aufs Betriebssystem schieben.

Zu Euren Fragen.

Zitat:

Was ich mich zuerst einmal Frage: Wofür um alles in der Welt brauchst Du so eine Schleife?
Immer wieder selben Fragen. Aber gut: Um den Kern des Problems am einfachsten darstellen.

Zitat:

Ich denke er hat ein Server Taskscheduler erwartet, wo die Zeitverteilung effektiver läuft.
Gar nix erwarte ich. Der Taskscheduler ist ok so wie er ist. Es laufen ständig "aktive" programme, die aber nicht gleich den Start von Standardanwendungen blockieren!

Zitat:

Aber wer das ständig über DoEvents bzw. Application.ProcessMessages oder ähnliches regelt, sollte vielleicht besser bei Basic bleiben
So ein kluger Satz. Ja, ok, Du bist was besseres weil Du keine Ahnung von VB hast. Aber danke für die Hilfe. Ich bin zufrieden mit Delphi und werde deswegen sicher nicht zu VB schwenken. Aber deswegen muss man ja nicht alles toll finden. Und wer der Meinung ist, irgendein SW-Entwicklungswerkzeug wäre pauschal BESSER als ein anderes, der hat keine Ahnung vom Programmieren.

Zurück zum Thema.
Debuggt doch mal die Schleife. Während des Debuggens nehmt ihr einfach mal den Finger von der F8-Taste und lasst das Programm zwar gestartet, aber nicht weiterlaufen.


Dann Excel starten. Das MUSS funktionieren, tut es aber nicht!
Und in VB funktioniert es nun einmal, kann ja auch nichts dafür.

Neotracer64 14. Dez 2007 16:25

Re: EINFACHSTES Delphi-Programm blockiert Betriebssystem
 
Sleep(1)

sakura 14. Dez 2007 16:33

Re: EINFACHSTES Delphi-Programm blockiert Betriebssystem
 
Zitat:

Zitat von little-x
Nicht immer alles aufs Betriebssystem schieben.

Würde ich nicht tun, aber eventuell auf Dein Entwicklungssystem. Warum: ich habe Dein Problem nicht ;)
Zitat:

Zitat von little-x
Debuggt doch mal die Schleife. Während des Debuggens nehmt ihr einfach mal den Finger von der F8-Taste und lasst das Programm zwar gestartet, aber nicht weiterlaufen.

Gemacht:
Zitat:

Zitat von little-x
Dann Excel starten. Das MUSS funktionieren, tut es aber nicht!

Excel startet ohne Probleme in weniger als 4 Sekunden. Egal ob im Debugmodus (angehalten oder am laufen) oder außerhalb des Debugmodus, wenn das Programm läuft.

Wo auch immer Dein Problem liegt, auf meinem Laptop (Dual-Core, Vista Ultimate, Delphi 7 & RAD Studio 2007) kann ich es nicht nachvollziehen.

...:cat:...

Elvis 14. Dez 2007 16:34

Re: EINFACHSTES Delphi-Programm blockiert Betriebssystem
 
Zitat:

Zitat von little-x
Zitat:

Aber wer das ständig über DoEvents bzw. Application.ProcessMessages oder ähnliches regelt, sollte vielleicht besser bei Basic bleiben
So ein kluger Satz. Ja, ok, Du bist was besseres weil Du keine Ahnung von VB hast. Aber danke für die Hilfe. Ich bin zufrieden mit Delphi und werde deswegen sicher nicht zu VB schwenken. Aber deswegen muss man ja nicht alles toll finden. Und wer der Meinung ist, irgendein SW-Entwicklungswerkzeug wäre pauschal BESSER als ein anderes, der hat keine Ahnung vom Programmieren.

Delphi ist pauschal besser, wüsstest du was deine Programme tatsächlich machen, dann wäre das für dich ziemlich offensichtlich.
Allein die Tatsach DASS du VB benutzt hast sagt aus, dass du entweder ein Lemming bist, der MSFT überall hinfolgt, oder eben nicht weißt was deine Programme wirklich machen.
Das folgende Zitat zeigt, dass es letzteres ist:
Zitat:

Zitat:

Ich denke er hat ein Server Taskscheduler erwartet, wo die Zeitverteilung effektiver läuft.
Gar nix erwarte ich. Der Taskscheduler ist ok so wie er ist. Es laufen ständig "aktive" programme, die aber nicht gleich den Start von Standardanwendungen blockieren!
Du hast dir eine schleife gebaut, die X Sekunden lang sämtliche Zyklen fressen wird, die sie kriegen kann. Das heißt eine wirklich aktive Anwendung.
Es ist alles andere als überraschend, wenn andere Prozesse weniger Zyklen abkriegen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:38 Uhr.
Seite 1 von 3  1 23      

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