Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi nonVCL Timer (https://www.delphipraxis.net/119644-nonvcl-timer.html)

XXcD 29. Aug 2008 01:01


nonVCL Timer
 
Hallo,
ich hatte vorhin gefragt wie ich eine TList fülle und jetzt habe ich schon wieder ein Problem das dann auch einzusetzen.

Ich müsste alle 30 Sekunden diese Liste aktualisieren, nun dachte ich mir nehme ich mal ein Timer, aber das ist nicht so einfach wie ich dachte.

Ich habe es erst so versucht:
Delphi-Quellcode:
procedure TSQL.reloadaccs(o: Tobject);
var ex: boolean;
    q: string;
    I:Integer;
    Account : TAccounts;
begin
SQL.ListAccounts:= TList.Create;
if assigned(SQL.FResult) then begin
    if SQL.FMysql.Status<>MYSQL_STATUS_READY then
      WriteLog('Ein Ergebnis wurde unvollständig gelesen!', true);
      FreeAndNil(SQL.FResult);
  end;
  q:='select * from user;';
  SQL.FResult := SQL.FMysql.query(q, true, ex);
  if ex then
  begin
    SQL.ListAccounts.Clear;
    SQL.FResult.First;
   for I := 0 to SQL.FResult.RowsCount - 1 do
   begin
    Account:= TAccounts.Create;
    Account.ID      := strtoint(SQL.Fresult.FieldValuebyname('id'));
    SQL.ListAccounts.Add(Account);
   SQL.FResult.Next;
   end;
  end;
end;
...
  SQL.Timer:= TTimer.Create(nil);
  SQL.Timer.Interval:=30000;
  SQL.Timer.OnTimer := SQL.reloadaccs;
  SQL.Timer.Enabled:=true;
die Funktion reloadaccs wird aber garnicht ausgeührt, danach habe ich in der DP folgendes gefunden:
Delphi-Quellcode:
Type
    ToTimerHandler = class(Tobject)
        constructor create (nMs: integer);
        private
        FoT: Ttimer;
        procedure timerCall(o: Tobject);
        end;

Procedure ToTimerHandler.timerCall(o: Tobject);
Begin
    FoT.Enabled := True;
    writeln;
    writeln;
    write ('Test......');
    qDone := False;
End;

...
begin
ToTimerHandler.create(30000);
end.
Da wird der Code aber nur ausgeführt wenn ich das so habe:
Delphi-Quellcode:
...
begin
ToTimerHandler.create(30000);
while true do
begin
Application.Processmessage;
end;
end.
Dadurch wird aber der Rest des Programms nicht mehr weiter ausgefüht.
Wie könnte ich jetzt einfach einen Timer benutzen, der den Rest des Programms nicht blockiert?

spaxxn 29. Aug 2008 09:32

Re: nonVCL Timer
 
Wenn der Timer-Event startet, könntest du einen Thread abfeuern, der die Arbeit in einem Kindprozess erledigt.

Zu Threads gibt es bei Delphi im Demo-Verzeichnis ein kleines Beispiel.

turboPASCAL 29. Aug 2008 10:45

Re: nonVCL Timer
 
Zitat:

nonVCL Timer
Und TStringlist, TTimer etc. gehören IMHO zur VCL.


Zitat:

Zitat von spaxxn
Wenn der Timer-Event startet, könntest du einen Thread abfeuern, der die Arbeit in einem Kindprozess erledigt.

Zu Threads gibt es bei Delphi im Demo-Verzeichnis ein kleines Beispiel.

Ist wohl die beste Möglichkeit.

Bernhard Geyer 29. Aug 2008 10:54

Re: nonVCL Timer
 
Zitat:

Zitat von turboPASCAL
Zitat:

nonVCL Timer
Und TStringlist, TTimer etc. gehören IMHO zur VCL.

Delphi-Quellcode:
Application.Processmessage;
Damit ist dann 95% der VCL eingebunden :-)

spaxxn 29. Aug 2008 11:10

Re: nonVCL Timer
 
:stupid:

Luckie 29. Aug 2008 11:32

Re: nonVCL Timer
 
Ich sehe nicht wo das etwa smit nonVCL zu tun hat. Es wird ja anscheinend ein Timer der SQL-Komponente benutzt.

XXcD 31. Aug 2008 23:43

Re: nonVCL Timer
 
Kann mir bitte einer Code für einen Timer in der Console geben?
Ich versuche es jetzt schon seid tagen und komme einfach nicht weiter.

lbccaleb 1. Sep 2008 00:24

Re: nonVCL Timer
 
Das was du benutzt ist doch kein nonVCL! Du hast doch ne Komponente benutzt! Wenn du nur auf API-Funktionen zurückgreifen möchtest, dann schau dir die API-Tutorials von Luckie an! Die sollten dir dort weiter helfen..

Hier das Dokument von Ihm:

API-Tutorials

Und hier noch Sampels und andere Bsp.:

Samples

XXcD 1. Sep 2008 01:06

Re: nonVCL Timer
 
nö funktioniert damit auch nicht.
Gib mir doch bitte einfach den richtigen Code um einen Timer in einem Konsolenprogramm zu verwenden.
Das was bei Luckie dabei ist, erzeugt ja ein Fenster und das ist ja wieder was ganz anderes.

hathor 1. Sep 2008 08:11

Re: nonVCL Timer
 
In einer DLL habe ich das mal so realisiert:
.
http://msdn.microsoft.com/en-us/library/ms644906.aspx
.
Delphi-Quellcode:
procedure TimerProc(Wnd:HWnd;Msg,TimerID,dwTime:DWORD);stdcall;
Begin
//das, was regelmäßig geschehen soll
end;


SetTimer(0,0,1000,@TimerProc) //1000 msec


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:59 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz