![]() |
timer
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 |
AW: timer
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 |
AW: timer
jepp .. ist eine konsolenanwendung ..
und was man noch sagen sollte .. dass diese anwendung auf einem server laufen wird.. danke erstmal -- werd mich mal erkundigen .. |
AW: timer
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 |
AW: timer
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? |
AW: timer
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 .. |
AW: timer
ich habe folgenden code im web gefunden .. jedoch habe ich damit meine probleme ...
Code:
das ganze habe ich auf
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; ![]() gefunden. kann mir jemand erklären, wie und wo ich das ereignis hinschreiben muss, sobald der timer abgelaufen ist ? |
AW: timer
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. |
AW: timer
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 |
AW: timer
ich habe mal folgenden code gefunden gehabt ..
aber es gibt dabei leider kleine komplikationen ... vielleicht könnt ihr mir dabei helfen !
Code:
der fehler sagt aus : Im Projekt Project1.exe ist eine Exception der Klasse EInOutError mit der Meldung 'E/A-Fehler-105' aufgetreten.
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. kann mir jemand evtl. weiterhelfen, was ich falsch mache ? danke ! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:26 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