Seite 1 von 1

SetTimerEvent() "fremd" abschalten [ERLEDIGT]

Verfasst: Di, 31. Aug 2010 14:22
von Manfred
Hi,

seit ein paar Tagen beobachte ich einen Vorgang, der mir etliches Kopfzerbrechen bereitet. Ich habe in einem Programm eine SetTimerEvent() gestartet, um eine Abfrage im Hintergrund zu tätigen. Auf meinen PC´s klappt es prima, nur auf einem Kunden PC so gut wie gar nicht. Zu Anfang läuft es eine Zeit, aber dann scheint dieser TimerEvent wohl von einem anderen Programm eliminiert zu werden. Teilweise hilft es das Programm neu zu starten, aber auch nicht immer. Der Kunde meint, es wäre etliches unterbunden auf dem PC von einem anderen Anbieter, aus Sicherheitsgründen.

Ist sowas mal eben kurz möglich, einen TimerEvent von außen zu killen?

Re: SetTimerEvent() "fremd" abschalten

Verfasst: Di, 31. Aug 2010 14:29
von Tom
Ist sowas mal eben kurz möglich, einen TimerEvent von außen zu killen?
Eigentlich nicht. Thread ist Thread. Wenn da jemand von außen reinfunken könnte, würde 95% der Software nicht mehr laufen. Ich vermute stark, dass Du das selbst tust. Z.B. durch mehrfache Aufrufe von SetTimerEvent() - es gibt nur eines pro Thread. Oder durch den Aufruf mit dem Parameter "0" (Null) irgendwo - das stoppt den Timer-Thread. Kann Dein Benutzer die Taktung des Events steuern/konfigurieren? Hat er da vielleicht irgendwo eine Null gesetzt?

Re: SetTimerEvent() "fremd" abschalten

Verfasst: Di, 31. Aug 2010 14:31
von Tom
Ergänzung: Möglich auch, dass sich der Thread aufgrund eines Laufzeitfehlers einfach verabschiedet. Gibt's eine SEQUENCE in diesem Thread? Oder einen eigenen ErrorBlock?

Re: SetTimerEvent() "fremd" abschalten

Verfasst: Di, 31. Aug 2010 14:35
von Manfred
Nenene,

nichts von dem. SetTimerEvent() wird (siehe express++ Thread) 1x am Anfang gestartet. Nirgendwo abgeschaltet. Und wie schon erwähnt, auf 2 meiner PC läuft das Teil ohne Probleme. Ich führe ein Protokoll über jeden Schritt, den der TimerEvent durchläuft und das Protokoll läuft in dem Falle nur am Anfang ein paar Minuten und dann tut sich nichts mehr. Der Event wird nach einer Zeit nicht einmal mehr automatisch gestartet, nach dem Neustart, was ja normalerweise der Fall ist.

Deine Vermutung hatte ich anfänglich auch, aber offizielle ist an dem Teil nichts zu drehen. Der Kunde wußte sogar nicht einmal etwas davon, das eine Abfrage im Hintergrund läuft. Außerdem habe ich die Sache selbst beobachtet.

Re: SetTimerEvent() "fremd" abschalten

Verfasst: Di, 31. Aug 2010 14:43
von Manfred
Tom hat geschrieben:Ergänzung: Möglich auch, dass sich der Thread aufgrund eines Laufzeitfehlers einfach verabschiedet. Gibt's eine SEQUENCE in diesem Thread? Oder einen eigenen ErrorBlock?
So ohne irgendwas anzuzeigen? Also ein Sequence oder extra Errorblock gibt es nicht.

Re: SetTimerEvent() "fremd" abschalten

Verfasst: Di, 31. Aug 2010 14:52
von Tom
Es liegt mit Sicherheit an einem Fehler in der aufgerufenen Prozedur. Ich könnte jetzt ein Beispiel bauen, mit einem TimerEvent, das irgendwo zergurkt ist, aber das könntest Du auch tun. Möglich - ich weiß es nicht -, dass Fehler im Timer-Thread schlicht zur Terminierung desselben führen, statt das ErrorSys aufzurufen.

Re: SetTimerEvent() "fremd" abschalten

Verfasst: Di, 31. Aug 2010 15:09
von Manfred
Na gut,

frage ich einmal anders herum: Könnte man irgendwie anzeigen lassen, ob der TimerEvent noch läuft. Meine Protokollführung scheint da ja nicht weit zu kommen. Gibt es irgendeine API oder so, die mir das anzeigen würde, oder der Taskmanager? Nur mal um zu gucken, ob und wenn ja wann der Thread abkackt.

Re: SetTimerEvent() "fremd" abschalten

Verfasst: Di, 31. Aug 2010 15:30
von Tom

Re: SetTimerEvent() "fremd" abschalten

Verfasst: Di, 31. Aug 2010 15:39
von Manfred
Hi Tom,

ich habe jetzt einmal das ganze Szenario mit Tageswechsel usw. durchgespielt bei mir. Nach Deinem Vorschlag mit dem Absturz, war ich doch etwas verunsichert. Aber es klappt. Also werde ich mal abwarten bis der Kunde sich einen neuen Rechner besorgt hat, auf dem nur mein Programm läuft und dann weiter sehen. War auch nur kurz eine Frage, ob jemand auf Anhieb sowas gehört hat.

Re: SetTimerEvent() "fremd" abschalten

Verfasst: Mi, 01. Sep 2010 21:26
von Manfred
Au man,

Fehler gefunden. Sowas blödes aber auch. Ich habe ab und an in dem Bereich einen Browser auf um anzuzeigen was sich in der Datenbank tut. Klar, der hat natürlich in dem Falle auch ein SetTimerEvent() laufen, um alle paar Sekunden den Browser zu aktualisieren. Der läuft bei mir nicht, aber beim Kunden. :roll: :banghead: angry9: :badgrin:

Hast also Recht gehabt mit Deiner 1.Vermutung. Den habe ich total vergessen.

Jetzt werde ich dafür wohl einen ExtraThread bauen müssen......