IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

POSIX C Discussion :

fonction qui me crée un thread


Sujet :

POSIX C

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut fonction qui me crée un thread
    Bonsoir je cherche a crée un fonction qui me crée un thread pour la fonction passé en paramètre, j'ai fait ceci :

    dans mon main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
     
    //crée un thread pour un nouveau programme
    int v2_nouveau_programme(void (*nouv_prog)()){
     
    	pthread_t thread;
     
    	if(pthread_create(&thread, NULL, nouv_prog, NULL) == -1) {
    		perror("pthread_create");
    		return EXIT_FAILURE;
    	}
     
    	return EXIT_SUCCESS;
     
    }
     
    //le nouveau programme
    void *mon_programme_1(void *arg)
    {
    	printf("nous sommes dans le thread 1\n");	
    	v2_rotate(0,90);
    	(void) arg;
    	pthread_exit(NULL);
    }
     
    int main(){
     
    	v2_nouveau_programme(mon_programme_1);
            return 0;
    }
    mais voila ca ne fonctionne pas ! j'ai comme message d'erreur passing argument 3 of pthread_create from incompatible pointer type
    pourtant je pense avoir passer correctement mes arguments à pthread_create !!!

  2. #2
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    Salut,

    C'est la définition de ta fonction qui n'est pas bonne, l'entête de nouv_prog doit être void(*nouv_prog)(void*), ta fonction doit donc obligatoirement prendre un paramètre void* même si tu ne l'utilises pas.

  3. #3
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    j'ai essayé mais ca ne veu pas non plus, le problème ne viendrais pas de là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int v2_nouveau_programme(void (*nouv_prog)()){
     
    	if(pthread_create(&thread, NULL, nouv_prog, NULL) == -1) {
    car je passe en paramètre un pointeur de *nouv_prog alors que dans pthread_create il ne veu pas de pointeur ver nou_prog ???

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    car je passe en paramètre un pointeur de *nouv_prog alors que dans pthread_create il ne veu pas de pointeur ver nou_prog ???
    ???

    Trademark t'a donné la réponse. Je la répète
    Le prototype de la fonction pthread_create() est int pthread_create(pthread_t * thread, pthread_attr_t * attr, void * (*start_routine)(void *), void * arg);.
    Le type du troisième argument doit être void * (*start_routine)(void *) or nouv_prog est du type void (*nouv_prog)().
    On doit avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int v2_nouveau_programme(void * (*nouv_prog)(void *)){
    ....
    Accessoirement faire retourner quelque chose à la fonction mon_programme_1()
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSLT 1.0] Crée une fonction qui retourne un résultat
    Par Pynouz dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 20/10/2011, 10h15
  2. Quitter une fonction qui fait une boucle dans le Thread ?
    Par bboy0303 dans le forum Multithreading
    Réponses: 2
    Dernier message: 25/05/2009, 17h58
  3. Réponses: 2
    Dernier message: 07/08/2008, 21h21
  4. Réponses: 12
    Dernier message: 05/06/2007, 07h36
  5. fonction qui crée un objet
    Par crossbowman dans le forum C++
    Réponses: 4
    Dernier message: 16/03/2006, 21h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo