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