geo1st487 Δημοσ. 6 Μαρτίου 2009 Δημοσ. 6 Μαρτίου 2009 Πως μπορω σε VB6 να χρονομετρησω την διαρκεια της εφαρμογης; Δηλαδη ποσο χρονο εχει ανοικτη ο χρηστης την εφαρμογη. Δεν θελω να χρησιμοποιησω το timer control, αλλα ουτε και την datediff διοτι ο χρηστης μπορει να αλλαξει ημερομηνια και ωρα και να μπερδεψει την εφαρμογη. Μπορω να παρω ημερομηνια και ωρα απο timer server αλλα μπορει ο χρηστης να αποσυνδεθει απο το internet οποτε παλι θα εχω προβλημα. Μια λυση που βρηκα ειναι η API συναρτηση GetTickCount η οποια επιστρεφει τον αριθμο των χιλιοστοδευτερολεπτων που εχουν περασει απο την στιγμη που μπηκε ο χρηστης στα windows. Η συναρτηση επιστρεφει ενα Long ακεραιο αριθμο και το προβλημα ειναι οτι αν ο χρηστης εχει αφησει τον υπολογιστη πανω απο 24 ημερες χωρις να κανει τερματισμο ή επανεκκινηση, δεν θα μπορεσει η συναρτηση να επιστρεψει ενα τοσο μεγαλο νουμερο (χιλιοστα δευτερολεπτου για πανω απο 24 ημερες). Υπαρχει κατι αλλο που μπορω να χρησιμοποιησω για να μην εχω αυτο τον χρονικο περιορισμο; Ευχαριστω
geo1st487 Δημοσ. 6 Μαρτίου 2009 Μέλος Δημοσ. 6 Μαρτίου 2009 GetTickCount64 Function Υποστηριζει vista, αλλα οχι XP.
geo1st487 Δημοσ. 6 Μαρτίου 2009 Μέλος Δημοσ. 6 Μαρτίου 2009 βάζε τους μέγιστους χρόνους σε μιά λίστα. Καθε ποτε; Δεν θελω να χρησιμοποιησω το Timer control.
bilco Δημοσ. 6 Μαρτίου 2009 Δημοσ. 6 Μαρτίου 2009 Χρησιμοποίησε την QueryPerformanceCounter (και την QueryPerformanceFrequency για να βρεις πρώτα σε τι συχνότητα μετράει)
geo1st487 Δημοσ. 6 Μαρτίου 2009 Μέλος Δημοσ. 6 Μαρτίου 2009 Χρησιμοποίησε την QueryPerformanceCounter (και την QueryPerformanceFrequency για να βρεις πρώτα σε τι συχνότητα μετράει) Πως θα τις χρησιμοποιησω;
bilco Δημοσ. 6 Μαρτίου 2009 Δημοσ. 6 Μαρτίου 2009 Πως θα τις χρησιμοποιησω; Επειδή η 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
geo1st487 Δημοσ. 8 Μαρτίου 2009 Μέλος Δημοσ. 8 Μαρτίου 2009 Επειδή η 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;
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.