Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi unendliche Schleife Blockiert restliches Programm (https://www.delphipraxis.net/98524-unendliche-schleife-blockiert-restliches-programm.html)

srx 28. Aug 2007 16:38


unendliche Schleife Blockiert restliches Programm
 
HI,
Ich habe in meinem Programm eine Schleife reingebaut, die sich selbst unendlich wiederholt.
Allerdings ist das Problem, dass es dafür das restliche Programm ständig blockiert.

Code:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var I: Integer;
begin

        //Memo1.Clear;
        //Edit1.Clear;
        //Memo1.Enabled:= false;
        //Edit1.MaxLength:= 20;
        //Edit2.MaxLength:= 2;
        //Edit3.MaxLength:= 11;
        //Edit3.Clear;

        //change Style/hide Window
        //SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE)
        //      or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
        //ShowWindow(Handle, SW_HIDE);
        //ShowWindow(Application.Handle, SW_HIDE);

        I:= 0;
        repeat
        begin
            //**Geheimer Befehl**;
            I:= 0;
        end;
        until I=2;

end;
so,
da das ganze im Form.Create steht öffnet sich das Programm nichtmal ..

Wisst ihr, wie man eine Schleife so laufen lässt, dass sie den Rest nicht blockiert ?

Apollonius 28. Aug 2007 16:40

Re: unendliche Schleife Blockiert restliches Programm
 
Am besten in einem Thread. Was willst du tun?

Kedariodakon 28. Aug 2007 16:41

Re: unendliche Schleife Blockiert restliches Programm
 
Sie in einem Thread ablaufen lassen? :angel2:

Torpedo 28. Aug 2007 16:46

Re: unendliche Schleife Blockiert restliches Programm
 
Eine Endlosschleife kann man aber einfacher machen (ohne Variable):
Delphi-Quellcode:
while true
begin
...
end;
Das Programm hängt, weil es immer in der Schleife ist und den restlichen Code deshalb nicht ausführen kann. Der Code wird Zeile für Zeile durchlaufen, nicht alles auf einmal ausgeführt. Also wenn die Zeilen in der Schleife immer wieder neu durchlaufen werden...

Du kannst aber einen Thread machen, in dem nur die Schleife ist. Dann wird diese unabhängig vom restlichen Code ausgeführt.

srx 28. Aug 2007 17:11

Re: unendliche Schleife Blockiert restliches Programm
 
Zitat:

Zitat von Torpedo
Eine Endlosschleife kann man aber einfacher machen (ohne Variable):
Delphi-Quellcode:
while true
begin
...
end;
Das Programm hängt, weil es immer in der Schleife ist und den restlichen Code deshalb nicht ausführen kann. Der Code wird Zeile für Zeile durchlaufen, nicht alles auf einmal ausgeführt. Also wenn die Zeilen in der Schleife immer wieder neu durchlaufen werden...

Du kannst aber einen Thread machen, in dem nur die Schleife ist. Dann wird diese unabhängig vom restlichen Code ausgeführt.

Wie mache ich den Thread ?

Ich versuche nämlich, dass unendlich versucht wird eine Sache zu blockieren.

sirius 28. Aug 2007 17:18

Re: unendliche Schleife Blockiert restliches Programm
 
Dazu gibts einige dutzend Themen hier.

Kurz die einfache Variante:
Füge "über Datei--> neu" ein Thread-Objekt ein! Schreibe deine Schleife in die execute Methode und instanziere dann irgendwo diese Klasse.


Edit
Zitat:

Ich versuche nämlich, dass unendlich versucht wird eine Sache zu blockieren.
Vielleicht solltest du uns das Konzept der Sache noch verraten. Ich glaube dein Lösungsansatz ist verkehrt.

srx 28. Aug 2007 19:01

Re: unendliche Schleife Blockiert restliches Programm
 
Zitat:

Zitat von sirius
Dazu gibts einige dutzend Themen hier.

Kurz die einfache Variante:
Füge "über Datei--> neu" ein Thread-Objekt ein! Schreibe deine Schleife in die execute Methode und instanziere dann irgendwo diese Klasse.


Edit
Zitat:

Ich versuche nämlich, dass unendlich versucht wird eine Sache zu blockieren.
Vielleicht solltest du uns das Konzept der Sache noch verraten. Ich glaube dein Lösungsansatz ist verkehrt.


Ok ok,

die ganze wahrheit ist, dass ich versuche einen task die ganze zeit zu blockieren.

Delphi-Quellcode:
function KillTask(const AExeName: string): boolean;
var
  p: TProcessEntry32;
  h: THandle;
begin
  Result := false;
  p.dwSize := SizeOf(p);
  h := CreateToolHelp32Snapshot(TH32CS_SnapProcess, 0);
  try
    if Process32First(h, p) then
      repeat
        if AnsiLowerCase(p.szExeFile) = AnsiLowerCase(AExeName) then
          Result := TerminateProcess(OpenProcess(Process_Terminate,
                                                 false,
                                                 p.th32ProcessID),
                                     0);
      until (not Process32Next(h, p)) or Result;
  finally
    CloseHandle(h);
  end;
end;
das ist die function KillTask, damit wird einfache in Prozess beendet

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin

        Memo1.Clear;
        Edit1.Clear;
        Memo1.Enabled:= false;
        Edit1.MaxLength:= 20;
        Edit2.MaxLength:= 2;
        Edit3.MaxLength:= 11;
        Edit3.Clear;

        //change Style/hide Window
        SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE)
              or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
        ShowWindow(Handle, SW_HIDE);
        ShowWindow(Application.Handle, SW_HIDE);

        while true do
            begin
                KillTask('taskmgr.exe');
            end;

end;
das ist jetzt mein form.create, damit der task nicht erst abgefragt werden muss, da ich ja nicht weiß, wann er gestartet wird/ist/war, soll er dauerhaft blockiert werden durch

Delphi-Quellcode:

        while true do
            begin
                KillTask('taskmgr.exe');
            end;

:duck:

Könnt ihr mir jetzt helfen ?

Torpedo 28. Aug 2007 19:12

Re: unendliche Schleife Blockiert restliches Programm
 
Wenn du einen anderen Prozess blockiert hättest (Cheat-Programm oder so) dann wäre das was anderes. Aber so ist offensichtlich was du machen willst. Ich glaube nicht dass dir da jemand helfen kann. (oder will)

Rastaman 28. Aug 2007 19:15

Re: unendliche Schleife Blockiert restliches Programm
 
Sowas kann durchaus sinnvoll sein.
Brauchte ich z.B mal für ein Party Musik Player, der den ganzen Bildschirm abdeckt und man halt
auf nichts Zugriff haben soll ausser auf den Player. Is leider nie was draus geworden :(
Tipp: Timer! Auch bei 1000 als Interval, so schnell kann keiner klicken.

Luckie 28. Aug 2007 19:17

Re: unendliche Schleife Blockiert restliches Programm
 
So was regelt man über die Benutzerrechte von Windows.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 Uhr.
Seite 1 von 2  1 2      

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