Προς το περιεχόμενο

Χρονομετρηση εφαρμογης


geo1st487

Προτεινόμενες αναρτήσεις

Δημοσ.

Πως μπορω σε VB6 να χρονομετρησω την διαρκεια της εφαρμογης; Δηλαδη ποσο χρονο εχει ανοικτη ο χρηστης την εφαρμογη. Δεν θελω να χρησιμοποιησω το timer control, αλλα ουτε και την datediff διοτι ο χρηστης μπορει να αλλαξει ημερομηνια και ωρα και να μπερδεψει την εφαρμογη. Μπορω να παρω ημερομηνια και ωρα απο timer server αλλα μπορει ο χρηστης να αποσυνδεθει απο το internet οποτε παλι θα εχω προβλημα. Μια λυση που βρηκα ειναι η API συναρτηση GetTickCount η οποια επιστρεφει τον αριθμο των χιλιοστοδευτερολεπτων που εχουν περασει απο την στιγμη που μπηκε ο χρηστης στα windows. Η συναρτηση επιστρεφει ενα Long ακεραιο αριθμο και το προβλημα ειναι οτι αν ο χρηστης εχει αφησει τον υπολογιστη πανω απο 24 ημερες χωρις να κανει τερματισμο ή επανεκκινηση, δεν θα μπορεσει η συναρτηση να επιστρεψει ενα τοσο μεγαλο νουμερο (χιλιοστα δευτερολεπτου για πανω απο 24 ημερες). Υπαρχει κατι αλλο που μπορω να χρησιμοποιησω για να μην εχω αυτο τον χρονικο περιορισμο;

Ευχαριστω

Δημοσ.

Χρησιμοποίησε την QueryPerformanceCounter (και την QueryPerformanceFrequency για να βρεις πρώτα σε τι συχνότητα μετράει)

Δημοσ.
Χρησιμοποίησε την QueryPerformanceCounter (και την QueryPerformanceFrequency για να βρεις πρώτα σε τι συχνότητα μετράει)

 

Πως θα τις χρησιμοποιησω;

Δημοσ.
Πως θα τις χρησιμοποιησω;

Επειδή η vd6 δεν έχει 64-ακέραιο χρησιμοποιούμε την Currency (που ουσιαστικά η αναπαράσταση της είναι 64bit ακέραιος - απλά πρέπει να πολ/σω με το 10000 για να πάρω αυτόν τον ακέραιο αλλά εδώ δεν μας απασχολεί αυτό)

>
Public Declare Function QueryPerformanceFrequency Lib "kernel32" (ByRef freq As Currency) As Long
Public Declare Function QueryPerformanceCounter Lib "kernel32" (ByRef count As Currency) As Long

Public Sub test_qpc()
 Dim f as Currency, start_time as Currency, end_time as Currency
 Dim elapsed_secs as Long

 ' πρώτα τη συχνότατα (ticks ανα δευτερόλεπτο)
 QueryPerformanceFrequency (f)
 ' ο χρόνος εκκίνησης
 QueryPerformanceCounter (start_time)
 ' κάνουμε ότι είναι να κάνουμε και όταν έρθει 
 ' η ώρα να υπολογίσουμε πόσος χρόνος πέρασε
 QueryPerformanceCounter (end_time)
 ' Για να βρούμε το χρόνο που πέρασε σε δευτ. διαιρούμε τη διαφορά end - start
 ' με τη συχνότητα
 elapsed_secs = (end_time - start_time) / f
 
End Sub

Δημοσ.
Επειδή η vd6 δεν έχει 64-ακέραιο χρησιμοποιούμε την Currency (που ουσιαστικά η αναπαράσταση της είναι 64bit ακέραιος - απλά πρέπει να πολ/σω με το 10000 για να πάρω αυτόν τον ακέραιο αλλά εδώ δεν μας απασχολεί αυτό)

>
Public Declare Function QueryPerformanceFrequency Lib "kernel32" (ByRef freq As Currency) As Long
Public Declare Function QueryPerformanceCounter Lib "kernel32" (ByRef count As Currency) As Long

Public Sub test_qpc()
 Dim f as Currency, start_time as Currency, end_time as Currency
 Dim elapsed_secs as Long

 ' πρώτα τη συχνότατα (ticks ανα δευτερόλεπτο)
 QueryPerformanceFrequency (f)
 ' ο χρόνος εκκίνησης
 QueryPerformanceCounter (start_time)
 ' κάνουμε ότι είναι να κάνουμε και όταν έρθει 
 ' η ώρα να υπολογίσουμε πόσος χρόνος πέρασε
 QueryPerformanceCounter (end_time)
 ' Για να βρούμε το χρόνο που πέρασε σε δευτ. διαιρούμε τη διαφορά end - start
 ' με τη συχνότητα
 elapsed_secs = (end_time - start_time) / f
 
End Sub

 

Τι τιμες πρεπει να δωσω στις μεταβλητες f, start_time, end_time;

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...