AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Letzte Eingabe ermitteln

Ein Thema von Manzoni · begonnen am 29. Sep 2004 · letzter Beitrag vom 29. Sep 2004
Antwort Antwort
Benutzerbild von Manzoni
Manzoni

Registriert seit: 15. Feb 2004
Ort: Berlin
120 Beiträge
 
Delphi 7 Enterprise
 
#1

Letzte Eingabe ermitteln

  Alt 29. Sep 2004, 13:56
Hi Leute,

Ich habe folgendes Problem: Ich möchte ermitteln, wann die letzte Eingabe durch den Benutzer erfolgt ist. Ich habe bereits folgende Funktion in der DP gefunden:
Delphi-Quellcode:
function LastInput: DWord;
var
  LInput: TLastInputInfo;
begin
  LInput.cbSize := SizeOf(TLastInputInfo);
  GetLastInputInfo(LInput);
  Result := GetTickCount - LInput.dwTime;
end;
Problem ist, dass die Funktion ja permanent überprüfen muss, ob mein Zeitlimit überschritten wurde. Ich habe die Funktion in einen eigenen Thread ausgelagert um mein Hauptprogramm nicht lahm zu legen nur verursacht der Thread nahezu 100% Auslastung. Gibt es eine bessere Möglichkeit? Hier nochmal der Code des Gesamten Thread:
Delphi-Quellcode:
unit UIdleThread;

interface

uses
  Windows, Types, Classes, SysUtils, Forms;

type
  TIdleThread = class(TThread)
  private
    { Private-Deklarationen }
    idletime : Longword;
    mode : boolean;
    function LastInput: DWord;
    procedure Display;
    procedure event;
  protected
    procedure Execute; override;
  public
    constructor create(idle : Longword; suspend : boolean);
    procedure new_idle(idle : Longword);
  end;

implementation

uses UMain;

function TIdleThread.LastInput: DWord;
var
  LInput: TLastInputInfo;
begin
  LInput.cbSize := SizeOf(TLastInputInfo);
  GetLastInputInfo(LInput);
  Result := GetTickCount - LInput.dwTime;
end;

procedure TIdleThread.new_idle(idle : Longword); //min_input
begin
  idletime:=idle*60000;
end;

constructor TIdleThread.create(idle : Longword; suspend : boolean);
begin
  inherited create(suspend);
  idletime:=idle*60000;
  mode:=true;
end;

procedure TIdleThread.Execute;
begin
  while true do
  begin
    if mode then
    begin
      if LastInput>idletime then event;
    end
    else
    begin
      if LastInput=10 then event;
    end;
    Application.ProcessMessages;
  end;
end;

procedure TIdleThread.event;
begin
  Synchronize(Display);
  mode:=not mode;
end;

procedure TIdleThread.display;
begin
  FClient.set_idle_stat(mode);
end;

end.
Danke und Mfg, Manzoni
Bob
  Mit Zitat antworten Zitat
KrasserChecker

Registriert seit: 21. Jul 2004
120 Beiträge
 
#2

Re: Letzte Eingabe ermitteln

  Alt 29. Sep 2004, 14:06
Hi,

das
Code:
Application.ProcessMessages;
bringt hier nix (da der Thread ja nicht der Hauptprozess ist).
Ersetze einfach diese Zeile durch
Code:
sleep(1);
und schon sollte alles wie gewünscht laufen
  Mit Zitat antworten Zitat
Benutzerbild von Manzoni
Manzoni

Registriert seit: 15. Feb 2004
Ort: Berlin
120 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Letzte Eingabe ermitteln

  Alt 29. Sep 2004, 14:41
Danke für den Tip! An dieser Stelle hatte ich früher schon mal sleep(10), was aber nicht funktionierte. sleep(1) geht wunderbar. Danke!
Bob
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 Uhr.
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