- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 9 von 9

Thema: VB6 Timer bleibt beim bewegen des Fensters kurz stehen

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    11.04.2005
    Beiträge
    1.469

    VB6 Timer bleibt beim bewegen des Fensters kurz stehen

    Anzeige

    Powerstation Test
    Hi,
    hab' gerade ein Problem mit VB6.
    Zum testen habe ich mal folgendes gemacht:
    Ein Formular mit einem Timer und einem Label.
    Alle 10ms soll der Wert ein Wert hochgezählt werden und im Label angezeigt werden.
    (Ich weiß, die VB-Timer sind wohl nicht gerade genau)
    Wenn ich nun das Teil während der Laufzeit verschiebe, bleibt mein Timer für etwa eine halbe Sekunde bis etwa eine Sekunde stehen.
    Allerdingsnur beim ersten "Anfassen"
    Alle weiteren Verschiebevorgänge bringen den Timer nicht mehr aus dem Tritt.
    Gehe ich auf die Clip Controls (verkleinern oder vergrößern) und halte die Maustaste gedrückt, bleibt das Teil komplett stehen.

    Kann man das irgendwie verhindern?
    (ohne das Formular zu disablen)



    Code:
    Public a As Integer
    Private Sub Form_Load()
        Timer1.Interval = 10
        Timer1.Enabled = True
    End Sub
    
    Private Sub Timer1_Timer()
        a = a + 1
        If a > 1000 Then
            a = 0
        End If
        Label1.Caption = a
    End Sub

    EDIT:hab' gerade gemerkt, ab und zu bleibt der Timmer auch beim erneuten anfassen stehen.
    Und in VB.Net ist der Effekt übrigens der gleiche, habe ich gerade festgestellt.

    Gruß
    Christopher

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Ohne daß ich irgendwelche Ahnung von VB hab (oder haben möchte... )

    -1-

    MS-Windows und Linux sind keine Echtzeit-Betriebssysteme. Man kann also nicht davon ausgehen, daß solche Aufgaben innerhalb bestimmer Zeiten ausgeführt werden oder nicht für längere Zeit (bis zu Sekunden) Interrupts gesperrt werden (GUI-Zeugs, Festplatten-Zugriffe, Speichefranforderungen, ...)

    -2-

    Wird der Timer in einem eigenen Thread gestartet? Das hilft evtl. wenn der Thread eine genügend hohe Priorität hat. Ist aber auch keine Garantie, siehe -1-
    Disclaimer: none. Sue me.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    11.04.2005
    Beiträge
    1.469
    Hi,
    hab' gerade mal einen alternativen timer von www.activevb.de ausprobiert der in einem eigenen thread läuft und laut Beschreibung von keinen Vorgängen in seiner Arbeit gestört wird. Gleiches Problem
    Daß Windows kein Echtzeit Betriebssystem ist, ist klar, aber so ein totales stoppen des Timers finde ich doch etwas krass.

    Gruß
    Christopher

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Wahrscheinlich wird garnicht mal der Timer gestoppt, sondern es geht "nur" eine/mehrere IRQs flöten.

    Hast du die Priorität des Threads hochgesetzt? Evtl ist auch die Priorität der VB-Machine das Problem, weil die ja die IRQs behandelt...
    Disclaimer: none. Sue me.

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von oratus sum
    Registriert seit
    25.12.2006
    Ort
    Wien
    Alter
    32
    Beiträge
    1.080
    Blog-Einträge
    1
    Na das ist ja noch nciht sooo schlimm!
    Wart einmal bis du 5 Timer hast und du ne MsgBox machst! Dann bleiben alle Timer stehen solange die MsgBox da is!

    Man könnte versuchen die Systemzeit andauernd abzurufen mit einer Schleife! Dann vergleicht man es und man hat ne Timer! Allerdings geht das nur in Sekunden größe und nicht ms! probiers mal aus!

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    11.04.2005
    Beiträge
    1.469
    Hi,
    ist nich sooo schlimm, aber beim Bootloader blöd
    Ich steuere den Bascom Sample-Bootloader mit einem eigenen Programm an.
    Wenn ich dann das Fenster bewege, gibt's eben einen Timout.
    Übrigens gibt's den gleichen Effekt auch beim MCS Bootloader.
    Der fliegt auch beim Fenster-Anfassen zeitweise raus.
    Naja, da muß ich wohl noch auf der µC Seite was Neues machen.
    Übrigens funktioniert der Timer in dem vorher genannten Beispiel doch.
    Nur die Darstellung in der Textbox bleibt stehen.
    Der Timer läuft aber trotzdem weiter!



    Gruß
    Christopher

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.06.2006
    Ort
    Schriesheim
    Alter
    36
    Beiträge
    478
    soweit ich mich nich erinnern kann, kann der timer in VB6 nur alle 26ms sein Tick-Event auslösen..

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    49
    Beiträge
    1.562
    bist du dir sicher das wirklich der Timer das problem ist ?

    Klar windows arbeitet nur nachrichten ab und die WM_TIMER gehört nicht gerade u denen die Windows als wichtig ansieht aber ich denke eher das die Graphickarte zbw. der Graphic treiber dein problem ist den wenn du das Fentser bewegst sich die Oberfläschen element mit unter gelockt !

    mach mal die sachen wie fensterinhalt bei ziehen aus dann sollte sich das problem nich mehr ganz so tragisch sein.

    Teste mal mit zwei Timern der ein zum anzeigen der andere zum zählen vielleicht ist dann das problem ganz weg.

    VB6 und Threads im haupt Thread von vb6 muß alles syncron sein so stürzt VB ab. Ich Programmiere viel mit C++ und muß software für unsere VB Truppe machen drum kenne ich da so einig probleme.

    Gruß
    P: Meine Tochter (06.11.07) und https://www.carnine.de
    M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.01.2007
    Ort
    Deutschland [Bayern]
    Alter
    41
    Beiträge
    125
    Code:
    Declare Function SetTimer Lib "user32" Alias "SetTimer" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
    
    Declare Function KillTimer Lib "user32" Alias "KillTimer" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
    2 Api Funktionen, die unter VB keine Timer-verzögerung besitzen.

    PS: www.google.de -> API-Guide ... ein super tool um API funktionen für VB zu finden.


    JimJim
    XUN

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress