Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1049 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Programme Multithreading

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Programme Multithreading

n°1109749
Aldarek
Posté le 06-06-2005 à 14:52:28  profilanswer
 

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

mood
Publicité
Posté le 06-06-2005 à 14:52:28  profilanswer
 

n°1109805
_darkalt3_
Proctopathe
Posté le 06-06-2005 à 15:24:34  profilanswer
 

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


---------------
Töp of the plöp
n°1109828
Aldarek
Posté le 06-06-2005 à 15:34:12  profilanswer
 

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:

n°1109830
_darkalt3_
Proctopathe
Posté le 06-06-2005 à 15:36:28  profilanswer
 

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
n°1109835
Aldarek
Posté le 06-06-2005 à 15:39:38  profilanswer
 

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:

n°1109851
_darkalt3_
Proctopathe
Posté le 06-06-2005 à 15:49:33  profilanswer
 

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


---------------
Töp of the plöp
n°1109856
Aldarek
Posté le 06-06-2005 à 15:51:47  profilanswer
 

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.

n°1109860
_darkalt3_
Proctopathe
Posté le 06-06-2005 à 15:53:55  profilanswer
 

nan mais je te parle de ton projet ;)


---------------
Töp of the plöp
n°1109869
Aldarek
Posté le 06-06-2005 à 15:55:11  profilanswer
 

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...

n°1109876
_darkalt3_
Proctopathe
Posté le 06-06-2005 à 15:56:59  profilanswer
 

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
mood
Publicité
Posté le 06-06-2005 à 15:56:59  profilanswer
 

n°1109885
ritzle
Posté le 06-06-2005 à 16:01:05  profilanswer
 

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.

n°1109897
Aldarek
Posté le 06-06-2005 à 16:06:26  profilanswer
 

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?

n°1109955
ritzle
Posté le 06-06-2005 à 16:25:56  profilanswer
 

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
n°1109957
Aldarek
Posté le 06-06-2005 à 16:26:07  profilanswer
 

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:

n°1110022
Aldarek
Posté le 06-06-2005 à 16:57:07  profilanswer
 

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

n°1110046
Aldarek
Posté le 06-06-2005 à 17:25:16  profilanswer
 

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:

n°1110056
ritzle
Posté le 06-06-2005 à 17:36:55  profilanswer
 

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

n°1110060
ritzle
Posté le 06-06-2005 à 17:38:19  profilanswer
 

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

n°1110065
ritzle
Posté le 06-06-2005 à 17:41:32  profilanswer
 

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


n°1110070
Aldarek
Posté le 06-06-2005 à 17:43:05  profilanswer
 

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:  

n°1110198
ritzle
Posté le 06-06-2005 à 19:32:13  profilanswer
 

on pourra voir le résultat ?

n°1110494
theredled
● REC
Posté le 06-06-2005 à 23:58:09  profilanswer
 

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. }

n°1110625
Aldarek
Posté le 07-06-2005 à 10:16:15  profilanswer
 

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

n°1110641
Aldarek
Posté le 07-06-2005 à 10:26:04  profilanswer
 

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:

n°1110723
Aldarek
Posté le 07-06-2005 à 11:16:06  profilanswer
 

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:

n°1110989
theredled
● REC
Posté le 07-06-2005 à 13:17:45  profilanswer
 

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"

n°1111005
thread g d​u mal
Posté le 07-06-2005 à 13:37:01  profilanswer
 

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;
 
}

n°1111021
thread g d​u mal
Posté le 07-06-2005 à 13:44:03  profilanswer
 


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?

n°1111023
thread g d​u mal
Posté le 07-06-2005 à 13:46:31  profilanswer
 

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

n°1111063
Aldarek
Posté le 07-06-2005 à 14:10:24  profilanswer
 

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

n°1111092
thread g d​u mal
Posté le 07-06-2005 à 14:20:55  profilanswer
 

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

n°1111095
Profil sup​primé
Posté le 07-06-2005 à 14:22:10  answer
 

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

n°1111112
Aldarek
Posté le 07-06-2005 à 14:29:38  profilanswer
 

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:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Programme Multithreading

 

Sujets relatifs
Comment temporiser un programme?Execution d'un programme C dans du java
lancer un autre programmebesoin d'un programme en C d'urgence
Cherche prog qui réorganise proprement un programmeMultithreading pour les nuls
activation d'une feuille pour l'execution de la suite du programmebesoin d'un programme
[QT] Iconifier son programmeProgramme VB sous EXCEL
Plus de sujets relatifs à : Programme Multithreading


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR