AGB  ·  Datenschutz  ·  Impressum  







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

TTimer - OnTimer Event wird nicht ausgeführt

Ein Thema von unerwartet · begonnen am 24. Sep 2004 · letzter Beitrag vom 24. Sep 2004
Antwort Antwort
unerwartet

Registriert seit: 7. Sep 2004
12 Beiträge
 
Delphi 7 Professional
 
#1

TTimer - OnTimer Event wird nicht ausgeführt

  Alt 24. Sep 2004, 14:49
Hallo,

ich habe folgenden Code (in Ausschnitten):

Delphi-Quellcode:
type
   TAgentStatusLogger = class(TObject)
      private
               saveTimer: TTimer;
      public
         procedure saveLogList(Sender: TObject);
         constructor Create(LogFile: string);
    end;

implementation

constructor TAgentStatusLogger.Create(LogFile: string);
begin
  inherited Create;

  saveTimer:= TTimer.Create(nil);
  saveTimer.OnTimer:= saveLogList;
  saveTimer.Interval:= 20;
  saveTimer.Enabled:= True;
end;

procedure TAgentStatusLogger.saveLogList(Sender: TObject);
begin
  ...
end;
Nun bin ich darauf gestoßen, dass TTImer ja unbedingt ein TComponent übergeben bekommen möchte. Da ich kein solches habe, hab ich einfach mal nil übergeben. Hat nicht funktioniert. Problem ist, das die Methode saveLogList nie aufgerufen wird. Ich dachte mir dass es vlt. genau daran liegt und habe meine Klasse testweise von TComponent abgeleitet und Self an den TTimer Konstruktor übergeben, aber auch da wird das OnTimer-Ereignis nicht ausgelöst. Was kann ich hier falsch gemacht haben?

Gruß
Marco
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#2

Re: TTimer - OnTimer Event wird nicht ausgeführt

  Alt 24. Sep 2004, 14:52
an dem owner, der im konstruktor übergeben wird, sollte es eigentlich nicht liegen. der wird ja erst beim destroy wieder gebraucht. da muss was anderes faul sein.
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#3

Re: TTimer - OnTimer Event wird nicht ausgeführt

  Alt 24. Sep 2004, 14:58
Bei mir geht das ohne Probleme, du must da irgendwas anderes falsch gemacht haben ...
Hier mein Code:
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  TAgentStatusLogger = class(TObject)
      private
               saveTimer: TTimer;
      public
         procedure saveLogList(Sender: TObject);
         constructor Create(LogFile: string);
    end;


var
  Form1: TForm1;

implementation

{$R *.dfm}

constructor TAgentStatusLogger.Create(LogFile: string);
begin
  inherited Create;

  saveTimer:= TTimer.Create(nil);
  saveTimer.OnTimer:= saveLogList;
  saveTimer.Interval:= 20;
  saveTimer.Enabled:= True;
end;

procedure TAgentStatusLogger.saveLogList(Sender: TObject);
begin
 Beep;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 TAgentStatusLogger.Create('Hallo');
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#4

Re: TTimer - OnTimer Event wird nicht ausgeführt

  Alt 24. Sep 2004, 15:23
Zitat von unerwartet:
Nun bin ich darauf gestoßen, dass TTImer ja unbedingt ein TComponent übergeben bekommen möchte. Da ich kein solches habe, hab ich einfach mal nil übergeben. Hat nicht funktioniert. Problem ist, das die Methode saveLogList nie aufgerufen wird. Ich dachte mir dass es vlt. genau daran liegt und habe meine Klasse testweise von TComponent abgeleitet und Self an den TTimer Konstruktor übergeben, aber auch da wird das OnTimer-Ereignis nicht ausgelöst. Was kann ich hier falsch gemacht haben?
Die TTimer Komponente führt die WinAPI Funktion SetTimer aus. Windows will eine WM_TIMER Nachricht an ein Fenster schicken.
Aber wo soll die Nachricht hingeschickt werden?
Kannst dir da ja mal paar Gedanken drum machen.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#5

Re: TTimer - OnTimer Event wird nicht ausgeführt

  Alt 24. Sep 2004, 15:40
Hi Marco,

Zitat von unerwartet:
Nun bin ich darauf gestoßen, dass TTImer ja unbedingt ein TComponent übergeben bekommen möchte. Da ich kein solches habe, hab ich einfach mal nil übergeben. Hat nicht funktioniert. Problem ist, das die Methode saveLogList nie aufgerufen wird. Ich dachte mir dass es vlt. genau daran liegt und habe meine Klasse testweise von TComponent abgeleitet und Self an den TTimer Konstruktor übergeben, aber auch da wird das OnTimer-Ereignis nicht ausgelöst. Was kann ich hier falsch gemacht haben?
Der Parameter den du übergeben musst ist der Owner. Falls du nil übergibst, bist du selbst dafür verantwortlich, den verwendeten Speicher (also das TTimer-Objekt) wieder freizugeben. Gibst du hingegen z.B. Form1 oder self an, so wird das Objekt beim zerstören des Owners (also Form1 oder self) auch zerstört. Mit der Funktionsweise des Timers hat dies nicht zu tun.
Prüfe aber mal, ob der Timer auch erstellt wird, nachdem es ja bei Julius einwandfrei funktioniert.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#6

Re: TTimer - OnTimer Event wird nicht ausgeführt

  Alt 24. Sep 2004, 15:49
Zitat von Sprint:
Die TTimer Komponente führt die WinAPI Funktion SetTimer aus. Windows will eine WM_TIMER Nachricht an ein Fenster schicken.
Aber wo soll die Nachricht hingeschickt werden?
Kannst dir da ja mal paar Gedanken drum machen.
Ein TTimer erzeugt sein eigenes Fenster-Handle mit enstprechender Window-Prozedur, ist also nicht das Problem.

Gruß, teebee
  Mit Zitat antworten Zitat
unerwartet

Registriert seit: 7. Sep 2004
12 Beiträge
 
Delphi 7 Professional
 
#7

Re: TTimer - OnTimer Event wird nicht ausgeführt

  Alt 24. Sep 2004, 15:50
Also ein bisschen näher bin ich dem Problem gerade gekommen.
Julius hat den Timer ja in der gleichen Unit deklariert wie sein Formular. Bei mir war das in einer eigenen Unit. Ich hab testweise den Code in die Hauptunit kopiert und dann wird das ganze auch aufgerufen. Nur ist mir nicht klar, wo da der Unterschied sein soll. In beiden Fällen sind es ja immer noch getrennte Klassen. Habt ihr irgendwelche Ideen?
  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 16:52 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