Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Maus bewegen kostet 100% CPU


Safran - Fr 20.01.06 19:12
Titel: Maus bewegen kostet 100% CPU
Hallo,

ich bin noch ein ziehmlicher Anfänger. Ich habe jetzt ein kleines Programm geschrieben das mein Mauszeiger in gewissen Zeitabständen wiederholt, allerdings ist mir bewusst das es unsauber ist, denn es verbraucht ziehmlich viel Resourchen.

Kann mir jemand einen kleinen Tipp zur Verbesserung geben? Danke im Vorraus!


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure Delay(Zeit: longint);
  var Zeit1,zeit2 :longint;
    begin
      Zeit1:= Gettickcount;

      repeat
        zeit2:= gettickcount;
        application.ProcessMessages;
      until (zeit2-zeit1 > zeit);
    end;

procedure TForm1.Button1Click(Sender: TObject);
  begin

    repeat

      begin
        Delay(15000);
        Mouse.CursorPos := Point(Mouse.CursorPos.x + 10, Mouse.CursorPos.y + 10);
        a :=0;
      end;

    until a>0;

  end;


AXMD - Fr 20.01.06 20:20

Statt dem Delay einen Timer verwenden. Einfach mal nach TTimer suchen...

AXMD


Jetstream - Mo 30.01.06 13:45

Deine Delay Prozedur sieht ja richtig eklig aus :)

Setz dir doch einfach nen Timer in die Form, da schreibste dann nur noch

Delphi-Quelltext
1:
Mouse.CursorPos := Point(Mouse.CursorPos.x + 10, Mouse.CursorPos.y + 10);                    

rein, und dann stellste noch dein Delay in den Properties des Timers ein.
Fertsch.


ghost_assassin - Mi 08.02.06 14:15

Zitat:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
    repeat   
      begin  
      Delay(15000);  
      Mouse.CursorPos := Point(Mouse.CursorPos.x + 10, Mouse.CursorPos.y + 10);  
      a :=0;  
      end;  
    until a>0;


das führt unweigerlich zu einer
endlosschleife...
wie soll denn a jemals größer
als 0 werden, wenn du immer
einen schritt vorher a auf 0 setzt
ergo: er arbeitet immer wieder deine
repeat schleife ab, ohne ein ende

kein wunder das du 100% systemlast
hast...


Mustafa - Do 09.02.06 03:42

Hallo,

warum benutzt du nicht den befehl "sleep(msek)" ?.
Es funktioniert super und verbraucht nicht die bohne !


Neidhard von Reuental - Do 09.02.06 08:08

mit sleep wird die ganze anwendung gestopt, ein zugriff auf die form ist dann nicht mehr möglich. bei zeitaufgaben sollte man immer einen timer verwenden. der wird auch ausgeführt wenn die anwendung grad mal nicht aktiv ist.


Jakob Schöttl - So 19.02.06 17:01
Titel: Was ist Mouse für ein Variable?
Hallo,

Was ist Mouse denn für eine globale Variable und welcher typ?


Green - So 19.02.06 20:36

sieht eher nach nem objekt aus... ;)


Fabian W. - So 19.02.06 20:42

Mouse.CursorPos := Point(Mouse.CursorPos.x + 10, Mouse.CursorPos.y + 10);Ich nehme mal an TPoint oder ein eigenes Record aus TPoints...