Delphi-PRAXiS
Seite 3 von 3     123   

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)

Deep-Sea 27. Jan 2011 20:03

AW: Realisierung Programm wurde gewisse Zeit nicht bedient ?
 
a) GetTickCount gibt die Werte in Millisekunden zurück, somit sind 5 Minuten eigentlich $000493E0. Wäre es in Sekunden, würde es weit über 100 Jahre reichen (siehe Unix-Timestamp).

b) Aber bleiben wir mal beim Seundentakt:
$012C - $FFFFF8F7 = $0835 = 2101 Sekunden = 35 Minuten - und das ist doch richtig, oder habe ich da was falsch verstanden? :stupid:

himitsu 27. Jan 2011 20:12

AW: Realisierung Programm wurde gewisse Zeit nicht bedient ?
 
LASTINPUTINFO = $FFFF8AD0 (30s vor Überlauf)
GetTickCount = $00007530 (30s nach Überlauf)


$00007530 - $FFFF8AD0 = $0000EA60 (60s)

Man muß nur beim Rechnen aufpassen, daß man natürlich unsigned (Cardinal) rechnet, damit der Überlauf korrekt behandelt wird. :stupid:

Wobei es hier zufällig signed auch mal paßt.
30 - -30 = 60


[add]
@Deep-Sea: nee, hast'e nicht :D

Assarbad 27. Jan 2011 20:15

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

Zitat von Deep-Sea (Beitrag 1077757)
a) GetTickCount gibt die Werte in Millisekunden zurück, somit sind 5 Minuten eigentlich $000493E0. Wäre es in Sekunden, würde es weit über 100 Jahre reichen (siehe Unix-Timestamp).

Sorry, mein Fehler. Arbeite zuviel mit unixoiden Systemen. Denkt es euch einfach "korrekt" :lol:

Zitat:

Zitat von himitsu (Beitrag 1077759)
Man muß nur beim Rechnen aufpassen, daß man natürlich unsigned (Cardinal) rechnet, damit der Überlauf korrekt behandelt wird. :stupid:

Hast recht. Da liegt der Hase begraben. Breiterer Typ oder vorzeichenbehaftet wären problematisch, nur ohne Vorzeichen scheint wohl zu gehen.

alfold 27. Jan 2011 22:13

AW: Realisierung Programm wurde gewisse Zeit nicht bedient ?
 
Bei aller Begeisterung und Beteiligung von euch.
Die Frgae die ich mir stelle ist, wird die Waage über einen Rechner gesteuert und gibt sie über einer Schnittstelle die Daten, oder ist das eine Kassenwaage oder oder oder...?

Im ersteren muss man ja nur die Schnittstelle abfragen(wenn es erlaubt wird) ob da was passiert, wenn nicht dann Standby senden(aber Vorsicht Daten).

Also bleibt doch wohl erstmal die Frage, was es genau ist und wie das ganze Arbeitet, bevor man sich an sowas ranwagt :!:

Und dann kann man sehen ob man den Rechner abfragt die Schnittstelle oder sogar die Software.

Gruss alfold

RalfE 28. Jan 2011 07:37

AW: Realisierung Programm wurde gewisse Zeit nicht bedient ?
 
Guten Morgen,

die Waage ist dumm, es gibt ein ser. Kommando "gehe in Standby", die Kollegen vergessen immer wieder die Waage
über deren Bedienpult in diesen Modus zu schalten, deswegen sollte dies über den PC automatisiert werden. Wird mit dem Program solange nicht
gearbeitet, so schalte Waage in Stand by-Modus.
Auf dem Rechner laufen noch Office-Programme, die in der
Zwischenzeit von den Kollegen benutzt werden.

Gruss

mleyen 28. Jan 2011 08:14

AW: Realisierung Programm wurde gewisse Zeit nicht bedient ?
 
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, SysUtils, Classes, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Messages, AppEvnts;

type
  TForm1 = class(TForm)
    tmr1: TTimer;
    aplctnvnts1: TApplicationEvents;
    procedure FormCreate(Sender: TObject);
    procedure tmr1Timer(Sender: TObject);
    procedure aplctnvnts1Message(var Msg: tagMSG; var Handled: Boolean);
  private
    FLastUserInput: Cardinal;
    FUserIsAfk: Boolean;
    function GetTimeSinceLastTick: Cardinal;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const
  UserIsAfkIn = 5000; // ms

procedure TForm1.aplctnvnts1Message(var Msg: tagMSG; var Handled: Boolean);
begin
  case Msg.Message of
    WM_KEYFIRST..WM_KEYLAST, WM_MOUSEFIRST..WM_MOUSELAST:
      if Msg.Message <> WM_MOUSEMOVE then
        FLastUserInput := GetTickCount;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FLastUserInput := GetTickCount;
  FUserIsAfk := false;
  Caption := 'state green';
end;

function TForm1.GetTimeSinceLastTick: Cardinal;
begin
  if GetTickCount < FLastUserInput then
    Result := (High(Cardinal) - FLastUserInput) + GetTickCount
  else
    Result := GetTickCount - FLastUserInput;
end;

procedure TForm1.tmr1Timer(Sender: TObject);
begin
  if FUserIsAfk then
  begin
    if GetTimeSinceLastTick < UserIsAfkIn then
    begin
      Caption := 'User is back';
      FUserIsAfk := false;
    end;
  end
  else
  begin
    if GetTimeSinceLastTick >= UserIsAfkIn then
    begin
      Caption := '!!! Zomg! User stopped workin and idles around !!!';
      FUserIsAfk := true;
    end;
  end;
end;

end.
Gibts außer dem Timer noch etwas auszusetzen?

alfold 28. Jan 2011 10:45

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

Zitat von mleyen (Beitrag 1077811)
[DELPHI]unit Unit1;
Gibts außer dem Timer noch etwas auszusetzen?

Im Prinzip schon!
Zitat:

Zitat von RalfE (Beitrag 1077800)
....Auf dem Rechner laufen noch Office-Programme, die in der
Zwischenzeit von den Kollegen benutzt werden.
Gruss

also geht es nicht mit der simplen abfrage ob Taste/Mouse nicht mehr benutzt wurden
Delphi-Quellcode:
case Msg.Message of
    WM_KEYFIRST..WM_KEYLAST, WM_MOUSEFIRST..WM_MOUSELAST:
      if Msg.Message <> WM_MOUSEMOVE then
        FLastUserInput := GetTickCount;
  end;
Darum ja auch die Frage von mir ob die Waage eine Schnittstelle hatt, welche?
Denn er muss ja den Befehl zur Waage schicken!
Nächste Frage ist, ob die Waage den 'Befehl Standby' von aussen überhaupt erkennt?
Nicht das es nur ne Hardware Angelegenheit ist! Dann hatt sich das Thema Software eh erledigt!

Wenn ja, dann fragt man nicht die Software ab (ob damit jemand arbeitet), sondern die Schnittstelle, ob da was passiert!

Solltest Du @RalfE erst mal Prüfen!

Gruss alfold


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:52 Uhr.
Seite 3 von 3     123   

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