Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Realisierung Programm wurde gewisse Zeit nicht bedient ? (https://www.delphipraxis.net/157853-realisierung-programm-wurde-gewisse-zeit-nicht-bedient.html)

RalfE 27. Jan 2011 15:11

AW: Realisierung Programm wurde gewisse Zeit nicht bedient ?
 
Hallo,

vielen dank für die Antworten.

Ist ein eigenes Programm, wird mit dem Programm
x Zeit nichts mehr gemacht (kein DB-Zugriff, kein Klicken
mehr...rein gar nichts), so soll über dieses Ereignis eine
Waage in Stand by geschaltet werden.

Wird immer vergessen....

Gruss

himitsu 27. Jan 2011 15:16

AW: Realisierung Programm wurde gewisse Zeit nicht bedient ?
 
MSDN-Library durchsuchenGetTickCount macht in diesem Fall keinerlei Probleme, da MSDN-Library durchsuchenLASTINPUTINFO das selbe Format verwendet.

Es gäbe also nur Probleme, wenn der User 49,7 Tage lang nichts mehr am PC gemacht hat.

Und durch die Verwendung eines Ersatzes für GetTickCount läßt sich auch nichts verbessern, da LASTINPUTINFO dennoch beschränkt wäre.

alfold 27. Jan 2011 15:27

AW: Realisierung Programm wurde gewisse Zeit nicht bedient ?
 
Zitat:

Zitat von himitsu (Beitrag 1077672)
.....
Es gäbe also nur Probleme, wenn der User 49,7 Tage lang nichts mehr am PC gemacht hat.
....

Urlaub:-D

Ich denke mal das so lange sicherlich nicht gemeint ist und länger als ne halbe oder ganze Stunde he kaum in betracht kommt! Alles was schon länger ist, ist ja im betrieblichen Einsatz schon reine verschwendung!

Gruss alfold

Assarbad 27. Jan 2011 16:38

AW: Realisierung Programm wurde gewisse Zeit nicht bedient ?
 
Zitat:

Zitat von himitsu (Beitrag 1077672)
Es gäbe also nur Probleme, wenn der User 49,7 Tage lang nichts mehr am PC gemacht hat.

Unsinn. Es geht nicht darum wie lange der Benutzer etwas gemacht hat oder nicht sondern wie lange der Computer schon läuft. Wenn bei der Zeitabnahme an Punkt X und an Punkt X+Y der Wert überlief, haste trotzdem Mist als Ergebnis bei allen bisher abgelieferten Codebeispielen.

Zitat:

The tick count when the last input event was received.
Dort steht "when", nicht "since".

Der Überlauf kann an beliebiger Stelle kommen. Die Tatsache daß MSDN-Library durchsuchenLASTINPUTINFO es auch verwendet macht's eigentlich eher schlimmer, weil dann einfach dort das gleiche Problem dort auftritt.

Fazit: Ab Vista MSDN-Library durchsuchenGetTickCount64 statt GetTickCount verwenden oder Vorkehrungen treffen damit der Überlauf nicht alles versaut. Vorkehrungen müssen in jedem Fall bei MSDN-Library durchsuchenLASTINPUTINFO getroffen werden, weil es scheinbar kein 64bittiges Pendant gibt.

Deep-Sea 27. Jan 2011 16:42

AW: Realisierung Programm wurde gewisse Zeit nicht bedient ?
 
Zitat:

Zitat von Assarbad (Beitrag 1077700)
[...] haste trotzdem Mist als Ergebnis bei allen bisher abgelieferten Codebeispielen.

Nicht ganz. Kombiniert man mein Beispiel mit dem OnMessage-Event mit der Timer-Idee von Sir Rufo bzw. himitsu, dann ist es unabhängig von GetTickCount - sofern die Timer bei 50 Tage Dauerlauf noch arbeiten wie sie sollen :-D

Assarbad 27. Jan 2011 16:43

AW: Realisierung Programm wurde gewisse Zeit nicht bedient ?
 
Zitat:

Zitat von Deep-Sea (Beitrag 1077702)
[...] Timer-Idee [...]

Don't get me started :roll:

himitsu 27. Jan 2011 17:01

AW: Realisierung Programm wurde gewisse Zeit nicht bedient ?
 
Zitat:

Zitat von Assarbad (Beitrag 1077700)
Unsinn. Es geht nicht darum ...

Nicht?

LASTINPUTINFO = wann hatte der Benutzer zuletzt was gemacht (seit dem Systemstart aka Wert von GetTickCount)
GetTickCount = wie lange läuft das System schon

Bei der Differenzberechnung hat ein "Überlauf" in diesen Werten keine Auswirkung, solange beide Werte keine Differenz von mehr als die 47 Tage haben.

DeddyH 27. Jan 2011 17:25

AW: Realisierung Programm wurde gewisse Zeit nicht bedient ?
 
Ich mag mich täuschen, aber werden da nicht im worst case Äpfel mit Birnen verglichen?
GetTickCount -> Zeit seit dem Systemstart
GetLastInputInfo -> Zeit seit der letzten Benutzeraktion in der aktuellen Session

Es kann also sein, dass beim Einen ein Überlauf eintritt, beim Anderen aber nicht (sofern ich keinen groben Denkfehler mache).

Bummi 27. Jan 2011 17:46

AW: Realisierung Programm wurde gewisse Zeit nicht bedient ?
 
Delphi-Quellcode:
var
 c,d:cardinal;
 i:Integer;
 Procedure AddAndDisplay;
  begin
   c := c + 10;
   d := d + 10;
   Memo1.Lines.Add(IntToStr(c-d) + ' - ' + IntToStr(c) +  ' - ' + IntToStr(d));
  end;
begin
   c := 4294967290;
   d := c - 20;
   Memo1.Lines.Add(IntToStr(c-d) + ' - ' + IntToStr(c) +  ' - ' + IntToStr(d));
   for I := 0 to 10 do AddAndDisplay;
end;

Assarbad 27. Jan 2011 19:24

AW: Realisierung Programm wurde gewisse Zeit nicht bedient ?
 
Zitat:

Zitat von DeddyH (Beitrag 1077712)
Es kann also sein, dass beim Einen ein Überlauf eintritt, beim Anderen aber nicht (sofern ich keinen groben Denkfehler mache).

Genau um diese Möglichkeit geht es. Und genau deswegen kann der zweite Wert deutlich kleiner sein als der erste.

@Bummi: kein Delphi hier zur Hand. Demo des Überlauf's verstehe ich, aber ob dort das zu erwartende Ergebnis kommt, weiß ich erst nach Testlauf :zwinker:

Zitat:

Zitat von DeddyH (Beitrag 1077712)
GetLastInputInfo -> Zeit seit der letzten Benutzeraktion in der aktuellen Session

Eben nicht. Wert von GetTickCount zu dem Zeitpunkt als die letzte Benutzeraktion erfolgte. Nicht seit, sondern als.

Nachtrag:
Zitat:

Zitat von himitsu (Beitrag 1077706)
Bei der Differenzberechnung hat ein "Überlauf" in diesen Werten keine Auswirkung, solange beide Werte keine Differenz von mehr als die 47 Tage haben.

Nicht? Wir sind uns einig, daß $FFFFFFFF die 49,7 Tage sind, korrekt? Wir sind uns einig, daß der Benutzer 30min vor Überlauf ($FFFFF8F7) eine Aktion gemacht haben könnte? Wenn ich nun 35min nach der letzten Aktion GetTickCount aufrufe (= 5min nach Überlauf = $12C), sind wir uns auch einig, daß der Differenzwert die 35min (in Sekunde) betragen sollte, was weniger als 49,7 Tage ist ... richtig?

Nunja, dank Überlauf stimmt die Rechnung nun leider nicht mehr ganz. Denn $12C - $FFFFF8F7 ... und das alles ohne Vorzeichen kann ziemlichen Quark hervorbringen ;)

Soo, 1s Abweichung in den obigen Rechnungen mögen mir gestattet sein :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:29 Uhr.
Seite 2 von 3     12 3      

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