florian1121
Messages postés37Date d'inscriptionjeudi 20 avril 2006StatutMembreDernière intervention26 avril 2006
-
22 avril 2006 à 15:55
cs_AlexN
Messages postés694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 2014
-
22 avril 2006 à 21:06
Bonjour, g un probleme avec deux boucles que je n'arrive pas a faire marcher simultanément!!
C soit l'une soit l'autre mais pas les deux en meme temps, alors qu'il le faut!!
Auriez vous une idée pour y remédier???
Voici mon programme:
#include
<stdio.h>
#include
<conio.h>
#include
<stdlib.h>
#include
<time.h>
void clrscr()
/*fonction qui recupere le code acii des touches*/
{
int c;
flushall();
c= getch();
if(c==0)
{
c= getch();
}
getch();
}
void time()
/*fonction qui effectue un decompte du temps en seconde*/
{
char touche;
time();
/* Premier boucle*/
do/*deuxieme boucle permettant d'associer a l'appui des fleches le changement de la variable*/
{
fflush(stdin);
touche = getch();
clrscr();
switch(touche)
{
case 72 : system(
"cls");
/* fleche du haut détectée (valeur ASCII) */
variable += 10;
/* augmentation de la variable */
printf(
"La voiture roule à %ikm/h", variable);
break;
case 80: system(
"cls");
/* fleche du bas détectée */
variable -= 10;
/*diminution de la variable*/
printf(
"La voiture roule à %ikm/h", variable);
break;
}
}
while(touche!=13);
/* tant qu'on appuie pas sur entrée, on boucle */
}
florian1121
Messages postés37Date d'inscriptionjeudi 20 avril 2006StatutMembreDernière intervention26 avril 20062 22 avril 2006 à 16:04
Merci de repondre si vite, mais je suis debuitant et je ne connait pas les thread!!
pourrait tu m'explique comment met-on chaque boucle dans un thread séparer, stp!!!!
florian1121
Messages postés37Date d'inscriptionjeudi 20 avril 2006StatutMembreDernière intervention26 avril 20062 22 avril 2006 à 16:48
C gentil de tas part, mais le manuel tt en anglais c pas trop mon truc!! deja qu'en francais g du mal en info!!!
Ce que je cherche exactement c a faire demarré de 0 le decompte du temps chaque fois que j'appuit sur une fleche!!
Saurait tu coment faire??
C un projet pour mes étude et le temps presse!!
MuPuF
Messages postés536Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention22 août 2008 22 avril 2006 à 18:03
Bon explications, un programme classique n'a qu'une thread, cela veut dire qu'il ne peut pas faire plus de une chose a la fois.
Avec 2 threads on peut en faire 2 à la fois mais faut synchroniser c'est le gros bordel.
Pour ce dont tu as besoin il y a une solution trés simple en mono-thread.
Windows integre une fonction qui s'appelle GetTickCount, elle compte le nb de milisecondes qui se sont écoulés depuis le lancement de l'OS.
Donc, quand on appuis sur une touche, il recupere ce temps. Ensuite pour recuperer le temps qu'il c'est passé depuis cet appuis, tu fais la soustraction entre le nouveau résultat de GetTickCount et l'ancien que tu avais stocké dans une variable.
florian1121
Messages postés37Date d'inscriptionjeudi 20 avril 2006StatutMembreDernière intervention26 avril 20062 22 avril 2006 à 18:27
Non t'a solution ne marche pas car j'ai besoin de l'évolution du temps sans appuyer sur une autre touche!!
je m'explique, il s'agit d'un ordinateur de bord d'une voiture!!
en apuyant sur la fleche haut la vitesse de la voiture augmente et j'ai besoin de calculer la distance parcourue par la voiture de maniere instantanée!! ce qui veut dire qu'en restant a la meme vitesse pendant un quart d'heure ( ca dire sans appuyer sur une autre fleche) la distance parcourue doit evolué sans cesse!
donc ta solution ne marche pas!!
Mais je suis sur une piste qui qui permettrait de calculer la distance pour chaque seconde et de l'additioné a la distance d'avant!!! mais il y'a encore ce probleme de decompte du temps!!!
Si vous avez une idée , je vous suit!! car moi je me prend la tete la dessus depuis un moment!!
merci.
fflush(stdin);
/* deuxieme boucle permettant d'associer a l'appui des fleches le changement de la variable*/
int vitesse = 0;
char verbe[10];
char touche;
do {
switch(touche = getKey()) {
case 72 :
system("cls");/* fleche du haut détectée (valeur ASCII) */
/* augmentation de la vitesse */
strcpy(verbe, (vitesse < 300) ? "roule" : "vole");
printf("La voiture %s à %i km/h", verbe, vitesse += 10);
break;
case 80:
system("cls"); /* fleche du bas détectée */
/* diminution de la vitesse */
if (vitesse || vitesse == 10 ) printf("La voiture roule à %i km/h", vitesse -= 10);
else { printf ("la voiture est arrétée\n"); vitesse = 0; }
break;
}
} while (touche != 13); /* tant qu'on appuie pas sur entrée, on boucle */
Si maintenant tu veux que le compteur (ThreadOne) te donne en plus la distance parcourue, il faut que tu mettes en place un système de communication entre ThreadMain et ThreadOne. De cette manière, chaque fois qu'on appuie sur une touche + ou -, le ThreadOne est mis au courant du changement de vitesse et peut ajuster ses calculs de distances.
Pour le système de communication, tu as principalement le choix entre mutex, semaphores ou evenements. Sinon il ya peut être aussi les IPC ou les segments de memoire partagé mais pas sûr avec windows.