Autor Beitrag
bigmasterdenis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 48



BeitragVerfasst: Di 22.01.08 14:46 
Hallo Leute!

Gibt es eine Möglichkeit herauszufinden ob das Programm gerade idle ist (nix tut) oder busy ist (gerade irgendwelchen Code abarbeitet) ??

Danke und Gruß
Genie
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 17

Win 95, 98, 2000, Millenium, XP, Linux, Unix

BeitragVerfasst: Di 22.01.08 14:57 
Breakpoint setzen und schauen
DrRzf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260

Win XP Prof
D7 Enterprise
BeitragVerfasst: Mi 23.01.08 20:31 
Irgendwie gibts da was mit Onidle, das ausgeführt wird wenn das Programm nichts tut.
Hab das irgendwo im Delphi Forum gelesen wo OpenGL verwendet wird.

_________________
rein statistisch gesehen darf man keiner statistik trauen die man nicht selbst gefälscht hat.
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mi 23.01.08 21:07 
Du könntest einerseits das Ereignis Application.OnIdle verwenden, um herauszufinden, ob das Programm gerade im Wartezustand ist.

Die andere Möglichkeit wäre, in jeder Prozedur bzw. Funktion eine Variable zu setzen, und sie beim Beenden wieder zu deaktivieren. Bei Ereignissen, die durchaus mal mehrere Prozeduren auf einmal ausführen, geht das allerdings schief.

Ein Beispiel: Du Klickst auf einen Button, eine Berechnung wird ausgeführt. Jetzt kommst du während des Rechenvorgans auf eine Schaltfläche, die als OnMouseMove-Ereignis einen Hint anzeigt. Wenn der Hint angezeigt wurde, wird die Variable wieder zurückgesetzt, obwohl das Programm noch arbeitet.
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: Mo 28.01.08 06:40 
Hi
Ich bin mir nicht sicher, ob es einen sinnlichen Nährwert hat, aber es ist kein Problem eine globale Wariable beim Einsprung in eine Procedure / Function zu setzen. Um dabei verschachtelte Aufrufe mitzuführen, denke ich ist eine lokale Variable OldProcID z.B. geeignet, vorher die globale Variable zwischen zu speichern und beim Verlassen wieder mit dem alten Wert zu besetzen. Ich denke aber, o schnell wird kein System sein, dem User zu zeigen, wo nun sein Programm ist, da man davon ausgehen kann, das diese Variable im ms- Bereich verändert wird. Man muß schon sehr sehr gute Reaktionen haben, um da mitzulesen....
Die andere Geschichte, ob das Programm im Wartezustand ist, läuft ähnlich, aber da kann ich mir vorstellen, ein Panel grün einzufärben und über einen Timer, der sein Enable auf false setzt, die Farbe verändern.
onIdle
ausblenden Delphi-Quelltext
1:
2:
Timer1.enabled:=True;
Panelx.Color:=Clgreen;
....


OnTimer
ausblenden Delphi-Quelltext
1:
2:
Timer1.Enabled:=False;
Panelx.Color:=ClRed;

....
Den Timer natürlich im kleinsten Zeitraster aufrufen... , Aber wie gesagt, ob's Sinn macht, weiß ich nicht.
Will man allerdings herausfinden, welchen Weg ein Programm geht, so ist dies über einen String evtl. möglich.
Z.B.hat jede Procedure oder Function eine Kennung und nun verlängert man den String immer um diese Kennung und ein Trennzeichen. Viel Spaß bei der Auswertung.....
Gruß oldmax

_________________
Zier dich nich so, ich krieg dich schon....
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 29.01.08 01:53 
Was ist denn dein Ziel bei der Aktion?

Durch eigenes Programm auslesen??? --> Application.OnIdle;
Durch ein fremdes Programm??? --> Stack-Status mit GetThreadContext für den fremden Prozess den Status auslesen und dann den Stack auswerten, ob der grad in der ntdll.dll verweilt.

Für Fremdzugriffe gibt's aber IIRC auch direkt über den Prozess-Screenshot ne Info über den Zustand der Anwendung.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.