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

Χρόνος στη C++


daidalus

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

Δημοσ.

Λοιπόν θέλω σε ένα πρόγραμμα να ελέγχω κάποιες τιμές (π.χ τιμές θερμοκρασίας) κάθε, ας πούμε 30 sec.Θέλω όμως αυτό να γίνεται ανεξάρτητα από κάποιες άλλες λειτουργίες του προγράμματος.Δηλαδή θέλω το πρόγραμμα ενώ ελέγχει ανά 30 sec την θερμοκρασία, να μπορεί να κάνει και κάτι άλλο όπως π.χ να εκτυπώνει στην οθόνη τις τιμές που διαβάζει.Κάποιοι μου είπαν ότι πρέπει να χρησιμοποιήσω threads.Κάποιοι άλλοι μου είπαν οτί δεν χρειάζονται threads και ότι αρκεί να χρησιμοποιήσω κάποιους timers που παρέχει η C++.Εσείς τι λέτε?Πώς χρησιμοποιούνται οι timers σε ένα πρόγραμμα?Το πρόγραμμα υλοποιείται στη Borland C++ 5.02 σε περιβάλλον Windows 2000.

 

Ευχαριστώ εκ των προτέρων!

Δημοσ.

Προσωπικά δουλεύω σε Visual C++, αλλά νομίζω ότι κάτι αντίστοιχο θα υπάρχει και σε Borland. Ψάξε να δεις αν υπάρχουν (σίγουρα θα υπάρχουν) message handlers σχετικά με timers. Στη VC υπάρχει το WM_TIMER, το οποίο μήνυμα ενεργοποιείται σε χρονικό δίαστημα που του ορίζεις εσυ ο ίδιος (δηλαδή κάθε 30'') και κάνει την δουλειά που θες. Αρκεί να δηλαδή να ορίσεις το διάστημα (interval) και να προσθέσεις τον κώδικα που θέλεις. Εύχομαι να σου έδωσα κάποια ιδέα, αν και δεν έχω ασχοληθεί ιδιαίτερα με Borland. Πάντως στη VC έχω κάνει δουλειά αντίστοιχη με την δική σου (το δικό μου διάστημα ήταν κάθε 1'') χωρίς να χρειαστεί να προγραμματίσω threads.

Δημοσ.

Λοιπόν για να στήσεις έναν Timer.. χρησιμοποιείς την εντολή:

 

SetTimer( HWND hWnd, UINT TimerID, UINT ElapseTime, TIMEPROC xTP);

 

Ως hWnd δίνεις το handle (hwnd) του παραθύρου που θα ανήκει ο timer (αν το xTP δεν είναι NULL μπορείς να το ορίσεις ως NULL αυτό και το TimerID).

 

Ως TimerID δίνεις ένα μοναδικό unsigned integer αριθμό που θα χαρακτηρίζει τον συγκεκριμένο timer.

 

Ως ElapseTime δίνεις σε milliseconds κάθε πότε θα ενεργοποιείται ο συγκεκριμένος timer.

 

Τέλος το xTP το ορίζεις ως NULL αν θες ο Timer να στέλλει στο hWnd το μήνυμα του όταν φτάνει ο συγκεκριμένος ElapseTime ή αν δεν θες να έρχεται ως μήνυμα ορίζεις ένα TimerProc (δεν το προτιμώ είναι πιο εύκολο να είναι NULL).

 

Πχ:

 

SetTimer(hwndMyWindow,1980,1000,NULL);

 

Αυτή η εντολή ορίζει έναν Timer με τον κωδικό 1980 για το παράθυρο hwndMyWindow που θα ενεργοποιείται κάθε 1000 milliseconds.

 

Για να διαχειριστούμε το timer event τώρα θα πρέπει να ορίσουμε στο hwndMyWindow message-loop ένα WM_TIMER message ως εξείς:

 

[..]

 

case WM_TIMER:

switch(wParam)

{

case 1980: // Ο timer μας!

[...]

break;

 

default: break;

}

break;

 

[..]

 

Τα παραπάνω σε καθαρό Win32s API .. αν χρησιμοποιείς OWL ..δεν μπορώ να σε βοηθήσω παραπάνω (δεν την χώνεψα ποτέ προτιμώ ή builder ή καθαρή C).

 

*Τα Threads άστα για πιο βαριές εργασίες αφού καταναλώνουν αρκετά CPU resources ..και στήνονται αρκετά πιο δύσκολα από τους Timer!

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

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

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