![]() |
Letzte Eingabe ermitteln
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:
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:
function LastInput: DWord;
var LInput: TLastInputInfo; begin LInput.cbSize := SizeOf(TLastInputInfo); GetLastInputInfo(LInput); Result := GetTickCount - LInput.dwTime; end;
Delphi-Quellcode:
Danke und Mfg, Manzoni
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. |
Re: Letzte Eingabe ermitteln
Hi,
das
Code:
bringt hier nix (da der Thread ja nicht der Hauptprozess ist).
Application.ProcessMessages;
Ersetze einfach diese Zeile durch
Code:
und schon sollte alles wie gewünscht laufen
sleep(1);
|
Re: Letzte Eingabe ermitteln
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!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz