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
Dort passiert das nämlich nicht
Da gibt's DoEvents.
PS: Ein
System.ProcessMessages hilft nicht, auch kein
System.HandleMessage. Gibt's da noch mehr?