|
| |

Allgemeine Diskussionen| Re: Zeitversatz | |  | | Autor: Tolwyn | | Datum: 14.01.02 12:37 |
| Hi,
erst mal als Antwort: Nein.
Wenn Windows gerade meint es müsse mit FindFast oder einer anderen gequirlten sche*** das System blockieren macht es das auch ohne zu zögern.
Was Zeitmessungen angeht (z.B. um die Laufzeit von Funktionen zu messen) so macht man das am besten mit dem 'QueryPerformanceCounter' (Der muss allerdings Hardwaretechnisch unterstützt werden). Hier ist eine kleine Klasse. Einfach in ein neues Klassenmodul kopieren.
'--------------------------------------------------
' Klasse für Zeitmessungen
'--------------------------------------------------
Option Explicit
' API Deklarationen
Private Declare Function QueryPerformanceCounter Lib "kernel32" _
(lpPerformanceCount As LARGE_INTEGER) As Long
Private Declare Function QueryPerformanceFrequency Lib "kernel32" _
(lpFrequency As LARGE_INTEGER) As Long
'--------------------------------------------------
' C Type
Private Type LARGE_INTEGER
lowpart As Long
highpart As Long
End Type
'--------------------------------------------------
Private mdTime As Double
Private mdAverage As Double
Private mlCounter As Long
'--------------------------------------------------
Private mdFrequence As Double
Private mLIStart As LARGE_INTEGER
Private mLIStop As LARGE_INTEGER
Private mbIsTimerOK As Boolean
Private mbRunning As Boolean
'--------------------------------------------------
' Known errors + 513
Private Const ErrS As Long = 20900
' + 1 - "BSTimer.Initialize", "PerformanceCounter not supported!"
' + 2 - "BSTimer.StopTimer", "Timer not started!"
' + 3 - "BSTimer.StopTimer", "Timer still running!"
'--------------------------------------------------
Private Sub Class_Initialize()
'--------------------------------------------------
'Prüfen ob Timer unterstützt wird
If QueryPerformanceFrequency(mLIStart) Then
mbIsTimerOK = True
mbRunning = False
'TimerFrequenz
mdFrequence = LIToCurr(mLIStart)
Else
Err.Raise (ErrS + 1), "BSTimer.Initialize", _
"PerformanceCounter not supported!"
End If
'--------------------------------------------------
End Sub
Public Property Get IsTimerOK() As Boolean
' Gibt zurück ob der PT von der Hardware unterstütz wird
IsTimerOK = mbIsTimerOK
End Property
Public Property Get IsRunning() As Boolean
IsRunning = mbRunning
End Property
Public Property Get Counter() As Long
Counter = mlCounter
End Property
Public Function ReachedTime() As String
'--------------------------------------------------
' Liefert die im letzten Durchlauf verstrichene Zeit
Static i As Long
Dim cStart As Currency
Dim cStop As Currency
'--------------------------------------------------
cStart = LIToCurr(mLIStart)
cStop = LIToCurr(mLIStop)
'--------------------------------------------------
If (cStop - cStart) < mdFrequence Then Exit Function
ReachedTime = ((cStop - cStart) / mdFrequence)
'--------------------------------------------------
mdTime = mdTime + Format(ReachedTime, "##0.000000000")
i = i + 1
mlCounter = i
'--------------------------------------------------
End Function
Public Sub StopTimer()
' Timer stoppen
Call QueryPerformanceCounter(mLIStop)
If Not mbRunning Then Err.Raise (ErrS + 2), _
"BSTimer.StopTimer", "Timer not started!"
mbRunning = False
End Sub
Public Sub StartTimer()
' Timer starten
If mbRunning Then
Err.Raise (ErrS + 3), "BSTimer.StopTimer", _
"Timer still running!"
End If
mbRunning = True
Call QueryPerformanceCounter(mLIStart)
End Sub
Public Property Get Average() As Double
'--------------------------------------------------
' liefert die Durchschnittszeit aller durchgeführten Läufe
mdAverage = mdTime / mlCounter
Average = mdAverage
'--------------------------------------------------
End Property
Public Property Get Laufzeit() As Double
'--------------------------------------------------
' Liefert die Gesamtlaufzeit
Laufzeit = mdTime
'--------------------------------------------------
End Property
Private Function LIToCurr(LargeInt As LARGE_INTEGER) As Currency
'--------------------------------------------------
' Umwandeln von LARGE_INTEGER in Currency
With LargeInt
If .lowpart > 0 Then
LIToCurr = .lowpart
Else
LIToCurr = CCur(2 ^ 31) + CCur(.lowpart And &H7FFFFFFF)
End If
LIToCurr = LIToCurr + .highpart * CCur(2 ^ 32)
End With
'--------------------------------------------------
End Function Der Umgang mit der Klasse sollte relativ sprechend sein. Also z.B. so
Dim oTimer As BSTimer
Set oTimer = New BSTimer
oTimer.StartTimer
Call MachIrgendWas
oTimer.StopTimer
MsgBox oTimer.ReachedTime
Set oTimer = Nothing Gruß Tolwyn |  |
 Zeitversatz | 65 | Jockel | 13.01.02 07:58 |   Re: Zeitversatz | 62 | Tolwyn | 14.01.02 12:37 |
 | 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 |
  |
|
sevOutBar 4.0 
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) Access-Tools Vol.1 
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
| |
|
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
|
|