vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Programm-Pause ohne DoEvents ohne (viel) CPU-Last  
Autor: T.i.m.
Datum: 19.03.05 18:41

Hallo Leutz,
hab mal ne Frage an Euch, wie Ihr diese Idee findet bzw.
ob jemand eine bessere Lösung kennt?

Ich benötige in einem Projekt eine "Programm-Pause"
Normalerweise würde man es ja so machen
Wait = 0
Do Until Wait > 1000
...
DoEvents
Wait = Wait +1
...
Loop
Nachteil: Die Pause ist je nach CPU nicht immer gleich lang
Nachteil: Durch DoEvents geht die CPU-Nutzung auf 100% (die CPU wird bei mir ganze 10°C wärmer)

Es gibt zwar noch andere Möglichkeiten, mittels Sleep und API oder so
Doch hab ich festgestellt das andere Programm-Module im eigenem Projekt auch still stehen. Dies soll aber aufkeinenfall vorkommen.

Sprich die Routine soll folgende Vorteile besitzen:
+ Keine 100% CPU-Last (Temperatur erwärmung)
+ Fremd Anwendungen (das System) soll weiterlaufen, ohne das es hängt
+ Eigene (parallel laufende) Programm-Routinen (im Projekt selbst) sollen auch noch weiterlaufen
+ NUR die Routine wo speziell gewartet werden soll, sollte angehalten werden
+ Die Pause sollte so genau wie nur möglich sein

Wie ich es zur Zeit gelöst hab:
1. Form: frmWait
2. Auf der Form frmWait einen Timer-Control: timWait
3. timWait ist Enabled und auf Interval 100 eingestellt (könnte man auch auf 1ms setzen)
4. Folgenden Code für frmWait:
Option Explicit
 
Private Sub Form_Load()
    With Me
        .Left = -1000
        .Top = -1000
        .Width = 0
        .Height = 0
    End With
End Sub
 
Private Sub timWait_Timer()
    If timWait.Tag <= 0 Then
        Unload Me
    Else
        timWait.Tag = timWait.Tag - 1
    End If
End Sub
Das eigentliche Projekt:
1. Form: frmMain
2. Ein Button: Command1
3. Folgenden Code für Command1
Private Sub Command1_Click()
 
    frmMain.Print "Nun soll 1 Minute gewartet werden"
 
    frmWait.timWait.Tag = 100 '  Durchläufe * frmWait.timWait.Interval (= 1Min) 
    ' : Einstellen wielang gewartet werden soll
    frmWait.Show 1 ' Durch Modal = 1 wird der Code hier nun solange angehalten, 
    ' bei = 0 gehts gleich weiter (aber das wollen wir ja nicht! könnte aber 
    ' vielleicht auch eine interessante Eigenschaft haben)
 
    frmMain.Print "Hier geht es nun nach der Pause weiter :-)"
 
End Sub
Um zu überprüfen ob auch andere Timer (bzw. Code) weiter ausgeführt wird kann man wie folgt etwas blinken lassen:
1. 2ten Timer verwenden: Timer1
2. Timer1 ist Enabled und auf Interval 1000 eingestellt
3. Ein Label: Label1
4. Folgender Code für Label1
Private Sub Timer1_Timer()
    If frmMain.Label1.BackColor = &H80000005 Then
        frmMain.Label1.BackColor = &H8000000D
    Else
        frmMain.Label1.BackColor = &H80000005
    End If
End Sub
Wie Denkt Ihr so über die Idee oder gibts doch ne bessere Lösung?
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Programm-Pause ohne DoEvents ohne (viel) CPU-Last :...1.654T.i.m.19.03.05 18:41
*LOL*788T.i.m.19.03.05 18:45
OK nun doch ne bessere Lösung 868T.i.m.19.03.05 19:14
Re: Programm-Pause ohne DoEvents ohne (viel) CPU-La...1.094OGGI20.03.05 14:56

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel