AMIOX? Δημοσ. 1 Μαρτίου 2012 Δημοσ. 1 Μαρτίου 2012 Γεια σας, Θέλω να τυπώνω αντίστροφη μέτρηση π.χ. μισής ώρας 00:30:00 00:29:59 00:29:58 00:29:57 .. .. Είδα την βιβλιοθήκη time.h αλλα δεν κατάφερα κάτι υπάρχουν έτοιμες συνατρήσεις; Ευχαριστώ για όποια βοήθεια.
bnvdarklord Δημοσ. 1 Μαρτίου 2012 Δημοσ. 1 Μαρτίου 2012 Η sleep(t) αν δεν κανω λαθος κανει το πρόγραμμα να περιμένει για t milliseconds. Οπότε για 1 δευτερόλεπτο βαλε t = 1000
Directx Δημοσ. 1 Μαρτίου 2012 Δημοσ. 1 Μαρτίου 2012 Μέσο time.h θα μπορούσες να το κάνεις ως εξής: > /* Simple count down (lame - just for demo, no accurate latency checking), xdir */ #include <stdio.h> #include <time.h> int main(void) { struct tm tm_start = { 1, 30, 0, 1, 0, 112, 0, 0, 0 }, /* Counter start (00:30:00) */ tm_end = { 0, 0, 0, 1, 0, 112, 0, 0, 0 }, /* Counter end (00:00:00) */ *tm_cur= NULL; /* Convert tm to time_t */ time_t tt_start = mktime(&tm_start), tt_end = mktime(&tm_end), tt_rtc_a = time(NULL); /* Chronometer */ int lsec = 1; /* Seconds to subtract */ while(tt_end != tt_start) { /* While Counter start <> Counter end */ tt_start -= lsec; /* -1 second */ tm_cur = localtime(&tt_start); /* Convert time_t to tm */ /* Print tm clock members on STDOUT */ printf("%.2d:%.2d:%.2d\n", tm_cur->tm_hour, tm_cur->tm_min, tm_cur->tm_sec); /* * Sleep for 1 second * Notice: !! I do not count possible System Latency in ms, accuracy could suffer !! */ while((lsec = difftime(time(NULL), tt_rtc_a)) < 1); tt_rtc_a = time(NULL); } /* End of program */ puts("\nPress Enter to exit.."); getchar(); } Η τιμή 112 συμβολίζει το παρόν έτος (2012), το "-=lsec" αφαιρεί ένα δευτερόλεπτο από την μεταβλητή tt_start. Το lsec είναι ο αριθμός των δευτερολέπτων που θα αφαιρέσουμε (υπό φυσιολογικές συνθήκες θα είναι 1). Η αναμονή (sleep) επιτυγχάνεται με την βοήθεια της difftime. Σημείωση: Υπόψη όμως ότι σε ένα multitasking περιβάλλον υπάρχει πάντα κίνδυνος η εκτέλεση της διεργασία μας να καθυστερήσει μερικά ms λόγο φόρτου εργασίας της CPU, σε αυτή την περίπτωση οφείλουμε να υπολογίσουμε στην αφαίρεση μας την καθυστέρηση αυτή καθώς μπορεί αθροιστικά να είναι πάνω από ένα δευτερόλεπτο καταστρέφοντας την ακρίβεια της χρονομέτρησης μας. Το παραπάνω πρόγραμμα λαμβάνει υπόψη του το γεγονός αυτό σε επίπεδο όμως δευτερολέπτου (βλ. lsec = difftime) οπότε δεν μπορεί να θεωρηθεί ακριβές (παρά μόνο σε ιδανικές συνθήκες) αλλά είναι αρκετό για να πάρεις μια ιδέα για το ζήτημα. Καλή συνέχεια! Υ.Γ. Το πρόγραμμα έχει δοκιμασθεί σε C++ Builder και μπορεί να περιέχει bugs ή άλλες αβλεψίες.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα