AGB  ·  Datenschutz  ·  Impressum  







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

timer

Ein Thema von arcon · begonnen am 14. Sep 2010 · letzter Beitrag vom 15. Sep 2010
Antwort Antwort
Seite 1 von 2  1 2      
arcon

Registriert seit: 8. Jun 2010
71 Beiträge
 
#1

timer

  Alt 14. Sep 2010, 14:51
servus miteinander,

ich würde gerne folgendes problem lösen :

ich überwache zyklisch ein programm. dabei soll bei jedem durchlauf der programmüberwachung in eine prozedur 'timer' gesprungen werden .. und überprüft werden , ob der timer schon abgelaufen ist .. ist der timer bereits abgelaufen, soll ein mail-versand stattfinden und der timer wieder auf den startwert gesetzt werden. ist der timer noch nicht abgelaufen, soll wieder aus der timer-prozedur herausgesprungen werden und die zyklische programmüberwachung fortgesetzt werden.

jetzt zu meiner frage: ist ein timer für diese realisierung sinnvoll und vor allem .. geht das nicht an die ressourcen ?

weiterhin wäre ich für ein kleines beispielprogramm sehr dankbar, die einen timer realisert .. (man muss evtl. dazu sagen, dass ich keine komponenten aus der toolpalette verwenden darf.. muss alles handgeschrieben sein ! )

danke für eure tipps

gruß arcon
  Mit Zitat antworten Zitat
Benutzerbild von MacGuyver
MacGuyver

Registriert seit: 9. Sep 2003
Ort: Wildeshausen
295 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: timer

  Alt 14. Sep 2010, 15:01
Moin,

ist das eine Konsolenanwendung? Die Standardkomponenten sind doch so rudimentär...

Sonst frage einfach GetTickCount ab. Du bekommst damit einen Wert in Millisekungen seit Start des Rechners. Nur nach 45 Tagen sollte so langsam der Rechner neu gestartet werden.


Stefan
Englisch eine Weltsprache? Zu kompliziert und der nahe Osten würde Englisch als Pflichtweltsprache nicht akzeptieren.
IDO wäre genau das Richtige: http://forum.idolinguo.de/index.php oder www.idolinguo.de
  Mit Zitat antworten Zitat
arcon

Registriert seit: 8. Jun 2010
71 Beiträge
 
#3

AW: timer

  Alt 14. Sep 2010, 15:07
jepp .. ist eine konsolenanwendung ..

und was man noch sagen sollte .. dass diese anwendung auf einem server laufen wird..

danke erstmal -- werd mich mal erkundigen ..
  Mit Zitat antworten Zitat
arcon

Registriert seit: 8. Jun 2010
71 Beiträge
 
#4

AW: timer

  Alt 14. Sep 2010, 15:13
noch ne frage ..

der timer muss ja immer durch laufen .. und das programm muss ja weiter laufen.. egal ob der timer durch ist oder nicht .. deswegen müsste ich das doch in extra thread darstellen oder ?

wenn ja.. wie mach ich das ganze ?

danke für die tipps
  Mit Zitat antworten Zitat
Benutzerbild von MacGuyver
MacGuyver

Registriert seit: 9. Sep 2003
Ort: Wildeshausen
295 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: timer

  Alt 14. Sep 2010, 15:46
Ich habe mein DOS-Programm (TP 7.0) in Delphi konvertiert. Ich kann es jetzt unter TP 7.0 und TurboDelphi kompilieren. Oh, ich wollte doch immernoch die Konvertierung veröffentlichen. Mal sehen, ob ich das heute abend eben mach.
Vom Thema abgekommen. In der Tastaturabfrage habe ich einfach alle Funktionen eingeschliffen. Wird keine Taste gedrückt, dann kommen die anderen Sachen dran. Externe Geräte, Abfrage ob der Bildschirmschoner starten muss, Kommunikation mit den anderen Stationen im Netz.

Bleibt die Frage, musst du da mit Freds agieren?
Englisch eine Weltsprache? Zu kompliziert und der nahe Osten würde Englisch als Pflichtweltsprache nicht akzeptieren.
IDO wäre genau das Richtige: http://forum.idolinguo.de/index.php oder www.idolinguo.de
  Mit Zitat antworten Zitat
arcon

Registriert seit: 8. Jun 2010
71 Beiträge
 
#6

AW: timer

  Alt 14. Sep 2010, 16:02
ich muss jedenfalls einen timer programmieren, der es mir ermöglicht .. unabhängig vom hauptprogramm .. die zeit herunterzuzählen .. dabei soll das hauptprogramm in seiner fkt. nicht beeinträchtigt oder schlafen gelegt werden .. da das hauptprogramm ja ständig in nem bestimmten zyklusinterverall das "programm" überwachen soll ..

deswegen wäre ein fred besser ..
  Mit Zitat antworten Zitat
arcon

Registriert seit: 8. Jun 2010
71 Beiträge
 
#7

AW: timer

  Alt 14. Sep 2010, 16:31
ich habe folgenden code im web gefunden .. jedoch habe ich damit meine probleme ...

Code:
type
  // die Demo-Thread-Timer-Klasse
  TTimerThread = class(TThread)
  private
    FID: Integer;     // ID des Threads
    FTimeout: Integer; // Laufzeit in Millisekunden
    FStep: Integer;   // Schrittweite in Millisekunden
    FLog: TStrings;   // Ausgaben hier anfügen
    FLogLine: String; // Zeile, die synchronisiert angefügt werden soll
  protected
    procedure SyncLogLineAdd; // synchronisierte Anfügemethode
    procedure LogIt(const S: String); // interne Logausgabe
  public
    // neues Objekt anlegen, beschreibende Werte direkt übergeben
    constructor Create(const AID, ATimeout, AStep: Integer; // s.o.
      const ALog: TStrings; // s.o.
      const AOnTerminate: TNotifyEvent); // beim Ende aufrufen (synchronisiert)
    procedure Execute; override; // hier wird gearbeitet -> also gewartet... ;)
  end;

 
implementation

 
// ----------------------------------------------------------------------------- 
// TTimerThread
 
constructor TTimerThread.Create(const AID, ATimeout, AStep: Integer;
  const ALog: TStrings; const AOnTerminate: TNotifyEvent);
begin
  inherited Create(TRUE); // gestoppt erzeugen
  // Werte übernehmen
  FID := AID;
  FTimeout := ATimeout;
  FStep := AStep;
  FLog := ALog;
  OnTerminate := AOnTerminate;
  FreeOnTerminate := TRUE;
  if Assigned(FLog) then // der Konstruktor läuft im Hauptthread, direkt ausgeben
    FLog.Add('+++Thread(ID:'+IntToStr(FID)+', Timeout:'+IntToStr(FTimeout)+'ms, Step:'+IntToStr(FStep)+'ms) erzeugt.');
  Resume; // los gehts! 
end;

 
procedure TTimerThread.Execute;
begin
  while ( (FTimeout >= 0) // solange der Timer noch nicht abgelaufen ist
          and             // und
          (NOT Terminated) // der Thread noch laufen soll
        ) do begin
    LogIt('  Thread '+IntToStr(FID)+': noch '+IntToStr(FTimeout)+'ms...');
    Sleep(FStep); // nur den Thread schlafen legen - die Anwendung blockiert nicht! 
    Dec(FTimeout,FStep); // Auszeit anpassen
  end;
  LogIt('---Thread '+IntToStr(FID)+': beendet.');
end;

 
// interne Logausgabe (synchronisiert) machen
procedure TTimerThread.LogIt(const S: String);
begin
  FLogLine := S; // die Ausgabe puffern
  Synchronize(SyncLogLineAdd); // und synchronisiert in Log schreiben
end;

 
// Methode, um synchronisiert eine Logzeile zu schreiben
procedure TTimerThread.SyncLogLineAdd;
begin
  if Assigned(FLog) then
    FLog.Add(FLogLine); // gepufferte Zeile ausgeben (jetzt im Hauptthread!)
end;
das ganze habe ich auf
http://www.delphi-library.de/viewtopic.php?p=463391
gefunden.

kann mir jemand erklären, wie und wo ich das ereignis hinschreiben muss, sobald der timer abgelaufen ist ?
  Mit Zitat antworten Zitat
Benutzerbild von MacGuyver
MacGuyver

Registriert seit: 9. Sep 2003
Ort: Wildeshausen
295 Beiträge
 
Turbo Delphi für Win32
 
#8

AW: timer

  Alt 14. Sep 2010, 17:02
Wie verschickst du die Mails?

Wenn das nur Sekundensache ist, kannst du doch eine Mail verschicken und dann die Tastatur abfragen. Sind alle Mails verschickt, startet der Timer neu.

Ich habe sonstetwas in meiner Tastaturabfrage drin und das Teil läuft gut: Blinkende Symbole, Modem-Verbedienung (nur der DOS-Bildschirm, habe ich wieder rausgeschmissen weil ich das nicht brauche), Schriftzüge die Blinken, Anzeige der Personalkosten, Anzeige der derzeitigen Lieferzeit, usw.

Bis jetzt hat sich kein Kunde beschwert, wenn es mal etwas träger ist.
Englisch eine Weltsprache? Zu kompliziert und der nahe Osten würde Englisch als Pflichtweltsprache nicht akzeptieren.
IDO wäre genau das Richtige: http://forum.idolinguo.de/index.php oder www.idolinguo.de
  Mit Zitat antworten Zitat
arcon

Registriert seit: 8. Jun 2010
71 Beiträge
 
#9

AW: timer

  Alt 15. Sep 2010, 08:23
die mails versende ich einmal am tag ... und das mach ich über die funktion 'JFSendMail' die es über das internet kostenlos gibt .. und sehr gut funktioniert !

mal ne andere frage .. wenn ich in nem neuen projekt auf einer form die funktion ttimer aus der produktpalette installiere.. funktioniert das wie gewollt ..

wie kann ich den das ganze in einen sourcecode umschreiben, so dass das dann auch funktioniert ? wisst ihr wie ich das meine ?

gruß arcon
  Mit Zitat antworten Zitat
arcon

Registriert seit: 8. Jun 2010
71 Beiträge
 
#10

AW: timer

  Alt 15. Sep 2010, 09:15
ich habe mal folgenden code gefunden gehabt ..

aber es gibt dabei leider kleine komplikationen ...

vielleicht könnt ihr mir dabei helfen !

Code:
unit Unit1;

interface

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

type
  PMethodPointer = ^TMethodPointer;
  TMethodPointer = packed record
    pMethod: Pointer;
    pObject: TObject;
  end;

type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  T: TTimer;
  p: TMethodPointer;
  i: Integer;
implementation

{$R *.dfm}
 procedure NotifyEvent(Self: TMethodPointer; Sender: TObject);
begin
  writeln('yes');
  beep;
end;

begin
  T := TTimer.Create(nil);
  T.Interval := 2000; // -> löst alle 200 ms das OnTimer-Event aus
  try
    p.pMethod := @NotifyEvent;
    p.pObject := nil;
    T.OnTimer := TNotifyEvent(p);

    T.Enabled := true; // aktiviert den Timer
    writeln('Warte auf Event: '); <------ Hier tritt der FEHLER auf !
    for i := 1 to 5 do begin
      sleep(500);
      writeln('warte ' + inttostr(i*500) + 'ms...');
      NotifyEvent(p, T);
    end;
    T.Enabled := false; // deaktiviert den Timer
  finally
    T.Free;
  end;
end.
der fehler sagt aus : Im Projekt Project1.exe ist eine Exception der Klasse EInOutError mit der Meldung 'E/A-Fehler-105' aufgetreten.

kann mir jemand evtl. weiterhelfen, was ich falsch mache ?

danke !
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:34 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