Accueil > Forum > > > > Besoin urgent d'aide pour appli console (horloge)
Besoin urgent d'aide pour appli console (horloge)
vendredi 3 novembre 2006 à 14:37:38 |
Besoin urgent d'aide pour appli console (horloge)

dalma101
|
IMPORTANT ET URGENT. MERCI D'AVANCE
Bonjour, mon amie a un projet console d'horloge + réveil à faire pour ses cours en c++. Je ne programme pas moi-même en c++ mais j'en profite parce qu'elle ne peut demander d'aide (pas internet !!!). Je programme en VB donc je suis un peu pommer pour l'aider. Je résume ce que doit faire le programme (en français) et ce qui merde...
En résumé (l'essentiel) :
- Module Clavier : scruter le clavier pour détecter quelle touche est appuyée ('m', 'M', '+', '-') (1 fonction "scruterClavier()")
- Module Cadran : affichage des données restituées (1 fonction "afficherCadran()")
- Module Horloge : (fonctions "Controler()", "AvancerHeures", "ReculerHeures", "AvancerMinutes",... ) - n modes changeant selon le nombre de fois qu'on appuie sur la touche 'm' 1 - affichage de l'heure (Buuuuuuuuupppp !!!) (120 boucles de "Sleep(500)") 2 - réglage des heures avec les touches '+' et '-' (OK) 3 - réglage des minutes avec les touches '+' et '-' (OK) 4 - réglage du réveil (appel de "reveil::controler(...)") (OK) 1 - etc...
- Module Réveil : (fonctions "Controler()", "AvancerHeuresAlarme", "ReculerHeuresAlarme", "AvancerMinutesAlarme",... ) - n modes changeant selon le nombre de fois qu'on appuie sur la touche 'm' 1 - réglage des heuresAlarme avec les touches '+' et '-' (OK) 2 - réglage des minutesAlarme avec les touches '+' et '-' (OK) 3 - affichage de l'heure Alarme (OK) 4 - retour à l'affichage de l'heure normale (normalement, appel de "horloge::controler()") (Buuuuuuuuupppp !!!)
Voilà ce qui cloche :
1- Lors de l'affichage de l'heure, qui doit s'incrémenter toutes les minutes, si on utilise un "Sleep(60000)" dans "Horloge::Controler()", le programme bug et on ne peut plus se balader dans les modes. D'où l'utilisation d'un "Sleep(500)" avec 120 boucles. Pas beau mais ça marche. Y a-t-il plus simple ?
2- Lorsqu'on arrive au réglage de l'alarme, plus moyen de retourner vers "Horloge::controler()". Pourquoi ? Comment faire ?
3- Si quelqu'un voit toujours de quoi je parle, lorsque qu'on passe de "Horloge::controler()" qui gère l'écoulement du temps avec "Sleep()" vers "Reveil::Controler()", l'horloge continue-t-elle de tourner ? Pas moyen de vérifier car ça bug (cf. point 2)... (Je connais pas c++ mais y a-t-il moyen de faire tourner 2 fonctions simultanément ? Comment ?)
Pour plus de précision ou avoir morceaux de code pour vérifier, ne pas hésiter à demander. Merci d'avance de l'aide que vous nous apporterez. Merci.......
|
|
vendredi 3 novembre 2006 à 15:09:36 |
Re : Besoin urgent d'aide pour appli console (horloge)

wxccxw
|
le code pourait etre interessant.
je regrderai
|
|
vendredi 3 novembre 2006 à 15:18:09 |
Re : Besoin urgent d'aide pour appli console (horloge)

nightlord666
|
Il peut utiliser des threads ou des timers pour faire ça.
Avec les timers, le programme recevra un événement toutes les X millisecondes, et restera réactif. Par contre, ça demande de faire une boucle de messages dans le programme.
Sinon, tu crée un thread qui gère l'input, et un qui incrémente ta variable toutes les X millisecondes (en faisant Sleep).
Regarde dans la MSDN pour les fonctions sur les timers ou les threads.
Sachant qu'on peut toujours enlever une ligne à un programme, et que dans un programme il y a toujours un bug, un programme peut se résumer à une ligne avec un bug.
|
|
vendredi 3 novembre 2006 à 15:46:42 |
Re : Besoin urgent d'aide pour appli console (horloge)

dalma101
|
Salut, comme j'ai cru le voir les Threads tournent en parallèle ce qui pourrait faire tourner l'horloge indépamment du reste du programme. Peux-t-on l'arrêter et le redémarrer en cours d'exécution programme ?
Aurais-tu un exemple concrêt simple d'utilisation et de codage ?
Merci. Des bouts de code seront fournis incessamment sous peu...
|
|
vendredi 3 novembre 2006 à 16:04:27 |
Re : Besoin urgent d'aide pour appli console (horloge)

dalma101
|
code de la classe horloge #include "horloge.h" // class's header file
// class constructor Horloge::Horloge(short _heures, short _minutes, short _mode, short _nbMode, short _resolution, Clavier _clavier, Cadran _cadran): heures(_heures), minutes(_minutes), mode(_mode), nbMode(_nbMode), resolution(_resolution), clavier(_clavier), cadran(_cadran) { // insert your code here }
// class destructor Horloge::~Horloge() { // insert your code here }
void Horloge::AvancerHeures() { if (resolution == 12 && heures < 11) { ++heures; } else if (resolution == 12 && heures == 11) { heures = 00; } else if (resolution == 24 && heures < 23) { ++heures; } else if (resolution == 24 && heures == 23) { heures = 00; } }
void Horloge::AvancerMinutes() { if (minutes < 59) { ++minutes; } else if (minutes == 59) { minutes = 00; } }
void Horloge::ReculerHeures() { if (resolution == 12 && heures > 00) { --heures; } else if (resolution == 12 && heures == 00) // à 12h du matin passe à 11h { // à 00h du soir passe à 11h heures = 11; } else if (resolution == 24 && heures > 00) { --heures; } else if (resolution == 24 && heures == 00) { heures = 23; } }
void Horloge::ReculerMinutes() { if (minutes > 00) { --minutes; } else if (minutes == 00) { minutes = 59; } }
void Horloge::Controler() { Clavier unClavier; Cadran unCadran; unCadran.Afficher(":",5); unCadran.Afficher(heures,2); unCadran.Afficher(minutes,7); short compteur = 0; do { Sleep(250); ++compteur; if (compteur == 240) { AvancerMinutes(); unCadran.Afficher(minutes,7); compteur = 0; } if (minutes == 00 && compteur == 0) { AvancerHeures(); unCadran.Afficher(heures,2); } } while (!unClavier.ScruterClavier()); char touche; int modulo; do { touche = unClavier.ScruterClavier(); if (touche == 3) { modulo = mode % nbMode; switch(modulo) { case 1 : unCadran.Afficher("HH : ",2); unCadran.Afficher(heures,7); break; case 2 : unCadran.Afficher("MM : ",2); unCadran.Afficher(minutes,7); break; case 0 : unCadran.Afficher(heures,2); unCadran.Afficher(minutes,7); short compteur2 = 0; do { Sleep(250); ++compteur2; if (compteur2 == 240) { AvancerMinutes(); unCadran.Afficher(minutes,7); compteur2 = 0; } if (minutes == 00 && compteur2 == 0) { AvancerHeures(); unCadran.Afficher(heures,2); } } while (!unClavier.ScruterClavier()); break; } ++mode; } else if (touche == 1) { switch (modulo) { case 1 : AvancerHeures(); unCadran.Afficher(heures,7); break; case 2 : AvancerMinutes(); unCadran.Afficher(minutes,7); break; } } else if (touche == 2) { switch (modulo) { case 1 : ReculerHeures(); unCadran.Afficher(heures,7); break; case 2 : ReculerMinutes(); unCadran.Afficher(minutes,7); break; } } } while(touche != 4); }
|
|
vendredi 3 novembre 2006 à 16:07:14 |
Re : Besoin urgent d'aide pour appli console (horloge)

dalma101
|
code de la classe Reveil #include <windows.h>
#include "reveil.h" // class's header file
// class constructor Reveil::Reveil(short _heures, short _minutes, short _mode, short _nbMode, short _resolution, Clavier _clavier, Cadran _cadran, short _heureAlarme, short _minuteAlarme): Horloge(_heures, _minutes, _mode, _nbMode, _resolution, _clavier, _cadran), heureAlarme(_heureAlarme), minuteAlarme(_minuteAlarme) { etatAlarme = false; }
// class destructor Reveil::~Reveil() { // insert your code here }
void Reveil::AvancerHeuresReveil() { if (resolution == 12 && heureAlarme < 11) { ++heureAlarme; } else if (resolution == 12 && heureAlarme == 11) { heureAlarme = 00; } else if (resolution == 24 && heureAlarme < 23) { ++heureAlarme; } else if (resolution == 24 && heureAlarme == 23) { heureAlarme = 00; } }
void Reveil::AvancerMinutesReveil() { if (minuteAlarme < 59) { ++minuteAlarme; } else if (minuteAlarme == 59) { minuteAlarme = 00; } }
void Reveil::ReculerHeuresReveil() { if (resolution == 12 && heureAlarme > 00) { --heureAlarme; } else if (resolution == 12 && heureAlarme == 00) { heureAlarme = 11; } else if (resolution == 24 && heureAlarme > 00) { --heureAlarme; } else if (resolution == 24 && heureAlarme == 00) { heureAlarme = 23; } }
void Reveil::ReculerMinutesReveil() { if (minuteAlarme > 00) { --minuteAlarme; } else if (minuteAlarme == 00) { minuteAlarme = 59; } }
void Reveil::Controler() { Clavier unClavier; Cadran unCadran; unCadran.Afficher(":",5); unCadran.Afficher(heureAlarme,2); unCadran.Afficher(minuteAlarme,7); char touche; int modulo2; do { touche = unClavier.ScruterClavier(); if (touche == 3) { modulo2 = mode % nbMode; switch(modulo2) { case 1 : unCadran.Afficher("HHr: ",2); unCadran.Afficher(heureAlarme,7); break; case 2 : unCadran.Afficher("MMr: ",2); unCadran.Afficher(minuteAlarme,7); break; case 3 : unCadran.Afficher("Rev: ",2); unCadran.Afficher("Of",7); break; case 4 : unCadran.Afficher(heureAlarme,2); unCadran.Afficher(minuteAlarme,7); break; case 0 : if (etatAlarme == true) unCadran.Afficher("R",9); if (etatAlarme == false) unCadran.Afficher(" ",9); unCadran.Afficher(heures,2); unCadran.Afficher(minutes,7); //Controler(); break; } ++mode; } else if (touche == 1) { switch (modulo2) { case 1 : AvancerHeuresReveil(); unCadran.Afficher(heureAlarme,7); break; case 2 : AvancerMinutesReveil(); unCadran.Afficher(minuteAlarme,7); break; case 3 : if (etatAlarme == false) { etatAlarme = true; unCadran.Afficher("Rev: ",2); unCadran.Afficher("On",7); } else if (etatAlarme = true) { etatAlarme = false; unCadran.Afficher("Rev: ",2); unCadran.Afficher("Of",7); } } } else if (touche == 2) { switch (modulo2) { case 1 : ReculerHeuresReveil(); unCadran.Afficher(heureAlarme,7); break; case 2 : ReculerMinutesReveil(); unCadran.Afficher(minuteAlarme,7); break; case 3 : if (etatAlarme == false) { etatAlarme = true; unCadran.Afficher("Rev: ",2); unCadran.Afficher("On",7); } else if (etatAlarme = true) { etatAlarme = false; unCadran.Afficher("Rev: ",2); unCadran.Afficher("Of",7); } } } } while(touche != 4); }
/*void Reveil::SurveillerAlarme() { Sleep(60000); if (heures == heureAlarme && minutes == minuteAlarme && etatAlarme == true) { do { Beep(1000,2000); // 1000 hertz (C5) for 2000 milliseconds }while (minutes != (minutes + 5)); } }*/
|
|
samedi 4 novembre 2006 à 16:53:20 |
Re : Besoin urgent d'aide pour appli console (horloge)

nightlord666
|
Pour redémarrer ou stopper ton thread, utilise une variable globale que tu mettra à true ou false selon l'etat que tu veut mettre à ton thread (en marche ou en pause). Ton thread vérifiera l'etat de cette variable, et se stoppera ou se remettra en route selon cet etat.
Sachant qu'on peut toujours enlever une ligne à un programme, et que dans un programme il y a toujours un bug, un programme peut se résumer à une ligne avec un bug.
|
|
Cette discussion est classée dans : ok, affichage, controler, horloge, réglage
Répondre à ce message
Sujets en rapport avec ce message
Controler le port série et l'horloge du pc [ par Melusyne ]
Bonjour !!! @ tous !!! Je suis actuellement en DUT Génie des télécoms & réseaux et je suis désespérée. Je dois faire un programme pour contrôle
Programmation QT [ par PunkDude424 ]
Salut, je travaille sur un projet en QT et je voudrais savoir comment faire opur connecter un bouton avec une slot.....j'ai le code suivant et le conn
OnOk en QT!!! Aidez-moi!!!!! [ par PunkDude424 ]
j'ai deux question :la premi;ere:je voudrais savoir comment faire opur connecter un bouton avec une slot.....j'ai le code suivant et le connect me ret
affichage d'un fichier txt dans une fenetre [ par cassiopee88 ]
Alors voila mon probleme, j'ai une application MDI. Dans laquelle j'ai créé plusieurs fenetres et je voudrai afficher le contenu de differents fichier
Allegro > Quelle méthode d'affichage ? [ par MRick571 ]
Kikou les amis d'allegro ;)Quelle méthode préférez-vous :- Le double buffering- le page flipping- le triple buffering ?Répondez nombreux, ca m'interre
Affichage d'image [ par elinep ]
Bonjour tout le monde!Voila mon probleme:Je me met a la programmation de l'API win32. J'essaye de faire un petit prog qui charge une image .bmp depuis
affichage au fur et à mesure [ par llandry ]
Bonjours,Je crée un programme devant déplacer des lettres sur la fenetre.Le probleme est que le déplacement des lettres s'effectuent bien mais je ne v
Affichage d'icone [ par SMarmotte ]
Bonjour à tous,j'aimerai afficher une icone 50x50 dans une fenêtre en utilisant GDI. Pour cela, je fait un LoadImage(...) et pour afficher mon icone j
Affichage de signaux de commandes bis [ par Irianne ]
Désolé, j'ai oublié de vous dire que je programmais sur visual C++ Builder 5. Donc si vous avez une méthode. Merci beaucoup d'avance.
Controler un moteur ou autre! [ par PunkDude424 ]
Salut, j'ai trouvé sur ce site comment faire pour controler le port parallele en c++, mais je voudrais savoir si c'est possible par exemple de control
Livres en rapport
|
Derniers Blogs
[WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|