daidalus Δημοσ. 17 Απριλίου 2002 Δημοσ. 17 Απριλίου 2002 Λοιπόν θέλω σε ένα πρόγραμμα να ελέγχω κάποιες τιμές (π.χ τιμές θερμοκρασίας) κάθε, ας πούμε 30 sec.Θέλω όμως αυτό να γίνεται ανεξάρτητα από κάποιες άλλες λειτουργίες του προγράμματος.Δηλαδή θέλω το πρόγραμμα ενώ ελέγχει ανά 30 sec την θερμοκρασία, να μπορεί να κάνει και κάτι άλλο όπως π.χ να εκτυπώνει στην οθόνη τις τιμές που διαβάζει.Κάποιοι μου είπαν ότι πρέπει να χρησιμοποιήσω threads.Κάποιοι άλλοι μου είπαν οτί δεν χρειάζονται threads και ότι αρκεί να χρησιμοποιήσω κάποιους timers που παρέχει η C++.Εσείς τι λέτε?Πώς χρησιμοποιούνται οι timers σε ένα πρόγραμμα?Το πρόγραμμα υλοποιείται στη Borland C++ 5.02 σε περιβάλλον Windows 2000. Ευχαριστώ εκ των προτέρων!
globc25 Δημοσ. 17 Απριλίου 2002 Δημοσ. 17 Απριλίου 2002 Προσωπικά δουλεύω σε Visual C++, αλλά νομίζω ότι κάτι αντίστοιχο θα υπάρχει και σε Borland. Ψάξε να δεις αν υπάρχουν (σίγουρα θα υπάρχουν) message handlers σχετικά με timers. Στη VC υπάρχει το WM_TIMER, το οποίο μήνυμα ενεργοποιείται σε χρονικό δίαστημα που του ορίζεις εσυ ο ίδιος (δηλαδή κάθε 30'') και κάνει την δουλειά που θες. Αρκεί να δηλαδή να ορίσεις το διάστημα (interval) και να προσθέσεις τον κώδικα που θέλεις. Εύχομαι να σου έδωσα κάποια ιδέα, αν και δεν έχω ασχοληθεί ιδιαίτερα με Borland. Πάντως στη VC έχω κάνει δουλειά αντίστοιχη με την δική σου (το δικό μου διάστημα ήταν κάθε 1'') χωρίς να χρειαστεί να προγραμματίσω threads.
Directx Δημοσ. 21 Απριλίου 2002 Δημοσ. 21 Απριλίου 2002 Λοιπόν για να στήσεις έναν 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!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.