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
    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é
    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
    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
    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 !