Programme Multithreading

Programme Multithreading - C++ - Programmation

Marsh Posté le 06-06-2005 à 14:52:28    

Je voudrais faire un programme qui pendant qu'on effectue des actions diverses, un compteur boucle en même temps, mais ce compteur n'intéragit pas avec ce que l'on fait à côté.
Quelqu'un pourrait il m'aider svp??
 
Merci d'avance

Reply

Marsh Posté le 06-06-2005 à 14:52:28   

Reply

Marsh Posté le 06-06-2005 à 15:24:34    

Lire de la doc sur les thread, effectivement.
Et bien détailler les topics, aussi.


---------------
Töp of the plöp
Reply

Marsh Posté le 06-06-2005 à 15:34:12    

j'ai déjà lu la doc sur les threads et je pige que dalle.
Sinon pour le programme, je sais pas quoi dire de plus.
C'est un tamagoshi, pendant que tu le fais manger etc, y a un compteur qui décompte ses points de vie et qui incrément aussi une variable représentant ses points d'évolutions.
Voilà  :hello:

Reply

Marsh Posté le 06-06-2005 à 15:36:28    

A quoi tu piges quedalle ?
Détaille ce qui n'est pas clair.
 
Pourquoi les threads?
quel langage ?
quel os ?


---------------
Töp of the plöp
Reply

Marsh Posté le 06-06-2005 à 15:39:38    

Et bien j'ai essayé de lire le tuto sur ce site : http://bob.developpez.com/tutapiwin/
 
Et j'ai rien compris.
 
Je veux faire du multi parce que même lorsque l'on effectue des actions comme manger etc, le compteur tourne toujours, indépendemment des actions efféctuées et ce n'est possible qu'avec le multithreading je pense, à part si tu as une autre solution... J'utilise le C++ sous Visual C++
 
J'ai téléchargé des exemples et je n'ai pas compris grand chose.
Merci d'avance :jap:

Reply

Marsh Posté le 06-06-2005 à 15:49:33    

t'as essayé de programmer quelque chose déjà ?


---------------
Töp of the plöp
Reply

Marsh Posté le 06-06-2005 à 15:51:47    

Oui je fais du C++ au lycée depuis un an, et je suis actuellement en stage et on me demande de faire un tamagoshi, et je dois avouer que j'ai un peu de mal, c'est pour ca que je demande l'aide de personnes expérimentées.

Reply

Marsh Posté le 06-06-2005 à 15:53:55    

nan mais je te parle de ton projet ;)


---------------
Töp of the plöp
Reply

Marsh Posté le 06-06-2005 à 15:55:11    

ha mdr (le gros nul) non j'ai pas essayé, j'ai essayé de suivre des exemples sur le site que j'ai mit tout à l'heure mais y a trop de mots nouveaux, que je comprend pas...

Reply

Marsh Posté le 06-06-2005 à 15:56:59    

Je te conseille d'essayer de coder quelque chose dans ce sens, et ainsi d'éclaircir les questions que tu te poses.
 
Pas-à-pas quoi. Commence par le prendre par un bout, et on voit ensuite.
 
C'est comme dans la pub: petit à petit, on devient moins petit !


---------------
Töp of the plöp
Reply

Marsh Posté le 06-06-2005 à 15:56:59   

Reply

Marsh Posté le 06-06-2005 à 16:01:05    

Au lieu de faire du multithreading, tu enregistre au debut l'heure.
Ensuite a chaque calcul de vie tu prend l'heure et tu fais un calcul avec l'heure de début.
Si c'est "en temps réel", tu fais ce calcul à chaque occurence de la boucle principale.

Reply

Marsh Posté le 06-06-2005 à 16:06:26    

J'ai pas très bien compris ce que tu me propose Ritzle, au début du programme, tu fixe l'heure et qu'est-ce que tu entends pas calcul de vie? Mon indicateur de vie doit tout le temps bouger, donc je comprend pas très bien...
Tu veux faire une soustraction entre l'heure ou ce calcul à lieu et l'heure de début et ensuite proportionnellement, donner un résultat pour la vie c'est bien ça?

Reply

Marsh Posté le 06-06-2005 à 16:25:56    

Admettons que tu veux enlever 1 pt de vie toutes les 2 secondes.
En pseudo-code :
 

Code :
  1. int points_de_vie
  2. float a_enlever;
  3. temps_debut = heure();
  4. a_enlever = 0.5;
  5. while( !quitter )
  6. {
  7.    //plein de choses
  8.  
  9.    points_de_vie -= ( heure() - temps_debut ) * a_enlever;
  10.  
  11. }


 
(heure() renvoie des secondes)


Message édité par ritzle le 06-06-2005 à 16:28:51
Reply

Marsh Posté le 06-06-2005 à 16:26:07    

Y a t'il un mot clé pour visual C++ pour effacer l'écran?
Car je sais que le clrscr() ne marche pas sous VC++
 
Merci :jap:

Reply

Marsh Posté le 06-06-2005 à 16:57:07    

C'est quoi comme bibliothèque qui faut mettre??
parce que il me met heure: undeclared identifier

Reply

Marsh Posté le 06-06-2005 à 17:25:16    

Pourrais tu commenter un peu ton code, car moi être perdu.
heure(), c'est une fonction que tu fais toi? ou c'est un mot clé d'une bibliothèque?
 
Et si c'est une fonction, tu met quoi dedans?
 
Merci d'avance :jap:

Reply

Marsh Posté le 06-06-2005 à 17:36:55    

j'ai précisé que c'était du pseudo-code, c'est-à-dire qu'on peut rien en faire tel quel (meme si ca ressemble fortement au C).
la fonction heure() n'existe pas, et je n'ai jamais su comment récupérer l'heure en C/C++... j'utilise souvent SDL et grace aux timers on peut savoir depuis combien de temps le programme a été lancé.
 
qu'est ce que tu comprends pas dans mon code ?
tu preferes une espece de basic ?
 

Code :
  1. int points_de_vie
  2.      float a_enlever
  3.    
  4.      temps_debut = heure()
  5.      a_enlever = 0.5
  6.    
  7.      while quitter==0
  8.    
  9.         //plein de choses
  10.        
  11.         points_de_vie -= ( heure() - temps_debut ) * a_enlever
  12.        
  13.      end

Reply

Marsh Posté le 06-06-2005 à 17:38:19    

c'est en quel langage/quelle plate forme l'instruction "clrscr()" ?

Reply

Marsh Posté le 06-06-2005 à 17:41:32    

ou en français :
 

Code :
  1. //déclaration des variables
  2. entier points_de_vie
  3. nombre_a_virgule a_enlever
  4. //initialisation des variables
  5. temps_debut = heure_actuelle()
  6. a_enlever = 0.5
  7. Tant_que quitter=0
  8.    commentaire : plein de choses 
  9.    points_de_vie = points de vie - ( ( heure_actuelle() - temps_debut ) * a_enlever )
  10.  
  11. Fin Tant_que


Reply

Marsh Posté le 06-06-2005 à 17:43:05    

Non c'était juste le heure qui me génait  
 
En ce qui concerne clrscr(), je sais qu'il marche sous Borland et qu'il ne marche pas sous VC++, donc je voulais savoir si tu savais quel mot clé utiliser.
 
Pour la fonction heure, il faut utiliser GetSystemTime je crois.  :)  
 
Merci beaucoup  :hello:  

Reply

Marsh Posté le 06-06-2005 à 19:32:13    

on pourra voir le résultat ?

Reply

Marsh Posté le 06-06-2005 à 23:58:09    

Pour l'heure t'as aussi GetSystemAsFileTime qui t'épargne des recompositions d'heure à la onc : GetSystemTime te la donne en décomposée : wYear, wMonth...wSecond, wMillisecond...
 
Une fonction pour choper l'heure :

Code :
  1. float GimmeTime(void)
  2. {
  3. _FILETIME heureform;
  4. GetSystemTimeAsFileTime(&heureform);  /*après*/
  5. return heureform.dwLowDateTime;
  6. /* _SYSTEMTIME timedecomp;
  7.         GetSystemTime(&timedecomp);       /*avant*/
  8. return timedecomp.wHour * 3600000 + timedecomp.wMinute * 60000 + timedecomp.wSecond * 1000 + timedecomp.wMilliseconds;*/
  9. }

Reply

Marsh Posté le 07-06-2005 à 10:16:15    

Merci beaucoup, je vais voir ce que je peux faire avec ca.
 
Merci en tout cas :jap:

Reply

Marsh Posté le 07-06-2005 à 10:26:04    

J'ai essayé ton bout de code theredled et il me retourne un vieux chiffre à virgule, comment ca se fait qu'il ne me retourne pas l'heure?
 
Merci d'avance :jap:

Reply

Marsh Posté le 07-06-2005 à 11:16:06    

J'ai trouvé ca comme exemple et apparamment tout marche bien...
http://www.cppfrance.com/code.aspx?ID=10173
 
Sauf le -1 dans le calcul des heures.
 
J'attends vos commentaires
 
Merci :jap:

Reply

Marsh Posté le 07-06-2005 à 13:17:45    

Normal pour le gros chiffre : l'heure que te donne ma fonction est en une seule valeur (je ne sais pas exactement comment GetSystemTimeAsFileTime calcule son chiffre) : il faut ensuite la convertir. Mais GetSystemTimeAsFileTime est très pratique surtout pour faire des calculs de temps (pas possible avec GetSystemTime), même précis (à la nanoseconde selon la doc).
 
Tu as d'autres fonction pour convertir genre FileTimeToSystemTime etc. J'ai trouvé tout ça dans la MSDN
 
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/getsystemtimeasfiletime.asp
 en naviguant entre les liens "see also"

Reply

Marsh Posté le 07-06-2005 à 13:37:01    

salut je me suis confronté au problème de l'heure y a pas longtemps j'ai galéré mais en fait c'est tout simple:
[cpp]
#include <windows.h>
#include <stdio.h>
int main()
{
 SYSTEMTIME systime;
 
 
GetSystemTime(&systime);
 
  // Determine day of the week.
  char day[10];
  switch (systime.wDayOfWeek)
  {
   case 0:
   sprintf(day, "Sunday" );
   break;
 
   case 1:
   sprintf(day, "Monday" );
   break;
 
   case 2:
   sprintf(day, "Tuesday" );
   break;
 
   case 3:
   sprintf(day, "Wednesday" );
   break;
 
   case 4:
   sprintf(day, "Thursday" );
   break;
 
   case 5:
   sprintf(day, "Friday" );
   break;
 
   case 6:
   sprintf(day, "Saturday" );
   break;
  }
 
   // Show the time in a message box.
 
  memset (str,0,sizeof(str));
  sprintf(str, "%s %u/%u/%u  %u:%u:%u:%u",  
   day,
  systime.wYear, systime.wMonth, systime.wDay,
  systime.wHour+2, systime.wMinute, systime.wSecond, systime.wMilliseconds);
  printf("%s\r",str);
  seconde = systime.wSecond;
  //printf("%d\r",seconde);
  Sleep(1);
 }
 return 0;
 
}

Reply

Marsh Posté le 07-06-2005 à 13:44:03    


Code :
  1. #include <windows.h>
  2. #include <stdio.h>
  3. int main()
  4. {
  5. SYSTEMTIME systime;
  6.  
  7. GetSystemTime(&systime);
  8.    
  9.   printf("%d:%d:%d",systime.wHour+2,systime.wMinute,systime.wSecond);
  10.   Sleep(1);
  11. }
  12. return 0;
  13. }


 
c mieu la.... ;) simple non?

Reply

Marsh Posté le 07-06-2005 à 13:46:31    

escuse pour la petite erreur avec return 0 et { ....
j'ai tapé trop vite

Reply

Marsh Posté le 07-06-2005 à 14:10:24    

Merci à tous pour toutes ces réponses, j'ai l'embarras du choix, et la dernière solution me parait bien..
 
Salut  :hello:

Reply

Marsh Posté le 07-06-2005 à 14:20:55    

;) pourquoi faire compliqué quand on peut faire simple  ;) ???

Reply

Marsh Posté le 07-06-2005 à 14:22:10    

wahhhhhhhh rien pigé loooooooooool c'est pour quoi faire Aldarek!?

Reply

Marsh Posté le 07-06-2005 à 14:29:38    

si tu lisai le topic tout entier, tu saurais que c'est pour récuprer l'heure à partir de l'horloge interne du pc et ensuite la décomposer pour l'afficher sous forme H : M : S.
 
Voilà  :hello:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed