begin process at 2012 05 28 19:39:10
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Linux

 > 

Autre

 > 

Débutant C : Problème pour récupérer une valeur dans un thread


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Débutant C : Problème pour récupérer une valeur dans un thread

dimanche 24 juillet 2011 à 10:39:07 | Débutant C : Problème pour récupérer une valeur dans un thread

eustatika

Bonjour,
Je débute en C et suis actuellement bloqué lorsqu'il s'agit de renvoyer une valeur à la fin de l'exécution d'un thread.
Voici mon (tout) petit programme :
Code C/C++ :
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>

#include <sys/types.h>
#include <time.h>
void *Chrono(void *arg);
int main()
{
    pthread_t threadIdent ;
    pthread_attr_t threadAttribut ;
    time_t timeC =NULL ;
    int retour;
    int *status ;
    int s ;

    s=pthread_create(&threadIdent,NULL, Chrono, (time_t*) timeC  ) ;

    pthread_join(threadIdent, (void *)status) ;
    printf("Thread terminé avec le status %d", status ) ;
    //Je souhaiterais ensuite utiliser la valeur de TimeC...


}


void *Chrono(void *arg)
{
    time_t currentTime;
    time_t startTime;

    time(&startTime) ;

    while(currentTime-startTime<3)
    {
        time(&currentTime) ;
    }

 arg = &currentTime ;

    pthread_exit(0) ;
}


En fait, lors de l'exécution de "*arg = &currentTime ;", le compilateur me renvoie un "segmentation fault".
L'autre question que je me pose est : est-on obligé d'écrire la fonction à exécuter dans le thread avec le paramètre "void *arg", ne pourrait-on pas passer un pointeur vers un autre type.
D'après ce que j'ai vu non, mais je ne comprends pas pourquoi.

Merci d'avance à ceux qui auront la pitié de me répondre.
J'ai encore du mal avec les pointeurs
dimanche 24 juillet 2011 à 13:06:32 | Re : Débutant C : Problème pour récupérer une valeur dans un thread

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
Effectivement, tu as des petits soucis avec les pointeurs !
Je t'invite à bien maîtriser ceux-ci, avant de te lancer dans le multithreading.

Autre petite chose, si ton but est juste de calculer le temps d'exécution d'un morceau de programme, tu n'as pas besoin de thread pour le faire.

Je te propose une correction de ton code (attention, elle n'est pas rigoureuse, je ne vérifie jamais les erreurs éventuelles):
Code C/C++ :
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <time.h>

void* chrono(void *arg)
{
  time_t currentTime = 0;
  time_t startTime = 0;
  time_t* timeC = NULL;

  time(&startTime);
  time(&currentTime);

  while (currentTime - startTime < 3)
    time(&currentTime);

  timeC = arg;
  *timeC = currentTime;

  pthread_exit(0);
}

int main()
{
  pthread_t threadIdent;
  time_t timeC = 0;
  int status;
  int s;

  s = pthread_create(&threadIdent, NULL, chrono, &timeC);

  pthread_join(threadIdent, (void*)&status);
  printf("Thread terminé avec le status %d\n", status);
  printf("TimeC = %d\n", (int)timeC);
  /* Je souhaiterais ensuite utiliser la valeur de TimeC... */

  return 0;
}


Compilé avec:

gcc -W -Wall -ansi -pedantic -lpthread thread.c



________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
dimanche 24 juillet 2011 à 14:07:14 | Re : Débutant C : Problème pour récupérer une valeur dans un thread

eustatika

Merci beaucoup.
Je crois que je vais faire une pause...
Je débute, certe mais quand je vois ça :
" arg = &currentTime ;"
Je me prendrais presque en pitié.
J'étais tellement bloqué par l'idée de découvrir les thread que j'ai fait une erreur débile (pas qu'une mais celle là est plutôt classe)/

En fait, je faisais des test car je tente de programmer un petit gestionnaire d'évènements perso. J'empile dans un tableau et je traite dans le thread.
Enfin, la route est encore longue pour moi. Rien que perdre les mauvaises habitudes du VB.Net va me prendre quelques temps

Merci infiniment.

Je vais faire un sieste.


Cette discussion est classée dans : include, void, time, thread, arg


Répondre à ce message

Sujets en rapport avec ce message

[VC++]Gestion du tps en C++ [ par Asarnil ] Voila , je cherche comment gerer le temps de maniere efficace en C++ .La j'ai fait un test qui fait avancer un 0 sur une ligne le pron c'est que meme PROBLEME DE THREAD (CreateThread -->ERROR) [ par neub ] Salut à tous, j'ecris un module de visionnement d'image etje souhaiterai pouvoir stopper ma fonction OnPlay au moment voulu mais j'ai un pb a la creat PROBLEME NETSEND [ par zzzzzz ] En fait j'essaye d'envoyer un message par la fonction net send via internet a ordi qui posssede xp. Si je mjet mon ip ca marche et si je met l'ip de q Coleur texte et fond d'écrant texte [ par cognac ] Voici une partie de mon programme (ça provient d'un excellent tut.). Mais je suis incapable de coloré le texte et le «fond d'écrant texte» en même tem Coleur texte et fond d'écrant texte [ par cognac ] Voici une partie de mon programme (ça provient d'un excellent tut.). Mais je suis incapable de coloré le texte et le «fond d'écrant texte» en même tem Ca veut pas s'afficher !!! [ par Nini ] Bon alors voilà le probleme : je doit faire afficher une phrase aléatoirement avec un switch et un rand mais elle veut pas s'afficher. Voilà ma source Help (threads) [ par loicus ] Bon, bhen voila.. j'essaye de faire un threadj'aimerais ouvrir la fonctions LCD_BootScreen() dans un thread, donc j'utilise cette fonction :thboot= Cr Help (threads) [ par loicus ] Bon, bhen voila.. j'essaye de faire un threadj'aimerais ouvrir la fonctions LCD_BootScreen() dans un thread, donc j'utilise cette fonction :thboot= Cr Difference [ par xionoxid ] C'est koi la difference entre time (0) et time (NULL) les 2 font des nbr aleatoire !??#include #include #i probleme avec getch() ds une bcle qui teste le tps ... [ par azerothkeeper ] d abbord une source simplifiee de mon probleme:#include #include #include using namespace std;int main(){ int x; time_t tps1,tps2; while(true)//


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,716 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales