Thread + C - Page 2

Précédent
  • 1
  • 2
  1. ahmed.ben.salem Messages postés 87 Statut Membre 4
     
    Bonjour;
    Bon, a ce moment j'ai utilisé deux thread pour réaliser cette tache, disant j'ai utilisé la sémaphore ( l'un bloc l'autre, après de déblocage l'exécution sera en // ) :)
    Donc maintenant mon problème est ce que je peut utiliser une fonction qui à des variables et que je l'affecte à un thread.

    Exempl :
    Ma_fonction(char *par1, int x)
    { ...... }
    
    if (pthread_create(&filsA, NULL, Ma_fonction, "AA")) {
                    perror("pthread_create");
                    exit(EXIT_FAILURE);
            }
    

    Est ce que je peut utilser sa ou nn?
    Merci d'avance.
    0
  2. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    oui et non, il faut que la fonction passer au thread soit de type void*f(void*)
    donc
    void* Ma_fonction(void* A){
    char* par1=(char*)A
    int x=*((int*)((char*)A+1);
    ...
    }
    ensuite, tu crée un pointeur, ou une structure:
    struct A{char* p1;int x;}
    que tu passe en paramètre de pthread_create :
    pthread_create(&filsA, NULL, Ma_fonction, &A)
    0
  3. ahmed.ben.salem Messages postés 87 Statut Membre 4
     
    Re;
    Merci, en fait j'ai créé une autre fonction qui prend pas ds paramétrés. Mais le prb d'affichage "Bonjour Tout le monde" sa existe encore, j'ai pensé que sa marché mais dommage, :( .
    On revient donc a notre première discussion :)

    Autre explication :
    Ma_fonction_thread() {
       injection de données dans le canal Client ( Domaine VoIP)
    }
    
    Ma_fonc_telechar() {
    
       lancer le thread lorsqe la taille du buffer > debut_injection
       et terminer la reception de données ( allocation dans le buffer)
    }
    

    Donc, t'en pense qoi?
    Merci d'avance.
    0
  4. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    J'en pense que tu a à ce momnet là un problème de synchronisation.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ahmed.ben.salem Messages postés 87 Statut Membre 4
     
    Re;
    Aidez moi svp les amis :(
    0
  7. ahmed.ben.salem Messages postés 87 Statut Membre 4
     
    Re bonjour;
    Les q peut m'aider, j'explique une autre fois le prb, c'est que moi je développe avec C et je voudrai utiliser la notion du thread dans la développement, la question c'est que : comment je peut faire fonctionné mon thread et en même temps ma fonction termine l'exécution du reste du programme. j'explique avec un exemple :
    Mafonction() {
     ...... des instruction 
    
    Appel d thread
    
    Reste des instructions 
    }
    

    Ici je veux que lorsque je fait appel à mon thread, ma fonction "Mafonction" termine l'exécution du reste d code.
    Rq : J'ai créé une variable globale pour faire arrêter mon thread.
    SVP les amis aidez moi.
    0
  8. ahmed.ben.salem Messages postés 87 Statut Membre 4
     
    Bonjour;
    Aidez SVP les amis.
    :(
    0
  9. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    un code qui fonctionne :
    #include <stdio.h>
    #include <stdlib.h>
    #include <pthread.h>

    volatile int ok = 0;

    void* affichage (void*) {
    while (ok != 1) { }
    printf(" Tout le monde \n ");
    return NULL;
    }

    int main (void) {
    pthread_t filsA;

    if (pthread_create(&filsA, NULL, affichage, 0)) {
    perror("pthread_create");
    exit(EXIT_FAILURE);
    }

    printf(" \n Bonjour ");
    ok = 1;
    if (pthread_join(filsA, NULL))
    perror("pthread_join");
    return 0;
    }
    0
  10. ahmed.ben.salem Messages postés 87 Statut Membre 4
     
    Re;
    Et tu pense quoi sur ce code ;)

    
    #include <stdlib.h>
    #include <stdio.h>
    #include <pthread.h>
    
    void* maFonctionA()
    {
        // Affiche 50 fois 1
            int i = 0;
            for(i=0 ; i<50 ; i++)
            printf("1\n");
    }
    void* maFonctionB()
    {
            // Affiche 50 fois 2
            int i = 0;
            for(i=0 ; i<50 ; i++)
            printf("2\n");
    }
    
    int ff()
    {
            pthread_t threadA, threadB; // On créun thread
            int j = 0;
            pthread_create (&threadA, NULL, maFonctionA, NULL); // Permet d'exéter le fonction maFonction en parallè
            pthread_create (&threadB, NULL, maFonctionB, NULL);
            // Attend la fin tu thread cré
            pthread_join(threadA, NULL);
            pthread_join(threadB, NULL);
            return 0;
    }
    
    int main() {
    
            int x = ff();
            return x;
    }
    
    


    Le résultat donné est le suivant :

    Code : Console
    1111111111222222222222222222222222222222222111111111111111111111111111111111112222222222222222211111

    Mais pourquoi les nombres s'affichent par paquets ? Si les fonctions se lançaient en parallèle, je devrais obtenir 12121212...

    Si les nombres s'affichent par paquet, c'est à cause de votre OS.
    En effet, la fonction principale (main) et la fonction exécuté par le thread créé (maFonction) ne se lance pas tout à fait en parallèle car votre OS va attribuer un temps d'exécution pour chaque thread.
    Votre OS va, par exemple, exécuter le code du thread n°1 de votre processus pendant 8 ms, puis va exécuter le code du thread n°2 du même processus aussi pendant 8 ms, etc. ...
    Il en est de même pour le fonctionnement des processus ;) .
    Ainsi, comme chaque thread est exécuté à tour de rôle pendant un temps très court, vous avez l'impression qu'ils se déroulent en parallèle.
    0
  11. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    heu ?...
    0
Précédent
  • 1
  • 2