2017-01-03 2 views
2

Ich programmiere in VB6, weil wir Legacy-Code und Hardware (externe Elektronik) verwenden.VB6 Tötungs-Timer

Meine Programme sind um Timer herum gebaut, wo ich Aufgaben in OS-Programmierung verwenden würde. Die Timer laufen, bis ihre Arbeit erledigt ist. Ein Flag wird gesetzt und ein weiterer Timer wird gestartet.

Ich möchte einen Überwachungstimer, der die anderen Timer steuert Wenn die Timer kein Ergebnis produzieren oder auf ein echtes Weltereignis warten, das nie kommt (Do While-Schleife) Ich möchte den Timer beenden. In der Elektronik haben wir einen Watchdog-Timer, der prüft, ob der Code noch läuft (und Ergebnisse liefert). Ich möchte einen Watchdog-Timer in VB6 machen.

Timer in vb6 haben Timer.interval und Timer.enabled. Ich kann den Timer mit diesen Tools nicht beenden. Ich kann den Start eines Timers verhindern. Ich kenne einige Möglichkeiten, eine Schleife zu beenden. Wie die Runden zählen und ausbrechen, wenn das Maximum erreicht ist. Oder überprüfen Sie sogar eine Flagge.

Gibt es eine Möglichkeit, einen VB6-Timer zu löschen? Wenn nicht, was ist der beste Weg, um Endlosschleifen zu vermeiden?

Side question: Gibt es eine Möglichkeit zu listen, welche Timer laufen?

Antwort

4

Sie haben Ihre eigene Frage beantwortet und die Einstellung .enabled auf false verhindert, dass das nächste Intervall ausgelöst wird.

Um den Timer zu "töten", wenn sein Intervall bereits läuft Sie müssten für eine Flagge überprüfen und beenden Sie innerhalb der laufenden Methode/s. (Es gibt keinen anderen Weg, da dies alles auf einem einzigen Thread passiert)

Gibt es eine Möglichkeit zu listen, welche Timer laufen?

Dim ctrl As VB.Control 
For Each ctrl In Me 
    If TypeOf ctrl Is VB.Timer Then 
     Debug.Print ctrl.Name, "running: "; ctrl.Enabled And ctrl.Interval > 0 
    End If 
Next 
+1

Plus eins. Hier ist ein [Link zur Microsoft VB6 Timer-Dokumentation] (https://msdn.microsoft.com/en-us/library/aa445561 (v = vs.60) .aspx) für ein gutes Maß. Es heißt "Immer wenn die' Enabled' Eigenschaft des 'Timer' Controls auf' True' gesetzt ist und die 'Interval' Eigenschaft größer als 0 ist, wartet das Timer Event auf den in der' Interval' Eigenschaft angegebenen Zeitraum. " – MarkJ