A voir également:
- Thread + C
- Compte thread - Accueil - Réseaux sociaux
- Thread instagram c'est quoi - Accueil - Guide réseaux sociaux
- Fausse appli Threads : déjà une imitation frelatée et dangereuse ! - Accueil - Guide arnaque
- Thread - Guide
- C quoi thread - Guide
30 réponses
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 :
Est ce que je peut utilser sa ou nn?
Merci d'avance.
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.
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)
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)
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 :
Donc, t'en pense qoi?
Merci d'avance.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 :
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.
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.
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;
}
#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;
}
Re;
Et tu pense quoi sur ce code ;)
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.
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.