Thread + C
Fermé
ahmed.ben.salem
Messages postés
86
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
28 avril 2009
-
21 juil. 2008 à 10:34
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 12 août 2008 à 15:02
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 12 août 2008 à 15:02
A voir également:
- Thread + C
- Thread meta - Guide
- Compte thread - Guide
- Exception in thread "main" java.awt.illegalcomponentstateexception: contentpane cannot be set to null. ✓ - Forum Programmation
- Exception in thread "javafx application thread" java.lang.nullpointerexception ✓ - Forum Java
- System thread exception not handled ✓ - Forum Windows 10
30 réponses
ahmed.ben.salem
Messages postés
86
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
28 avril 2009
4
21 juil. 2008 à 11:40
21 juil. 2008 à 11:40
slt;
quelqu'un peut m'aider les amis :(
Merci d'avance.
quelqu'un peut m'aider les amis :(
Merci d'avance.
BoBoXx
Messages postés
260
Date d'inscription
mardi 24 juin 2008
Statut
Membre
Dernière intervention
3 août 2008
34
21 juil. 2008 à 14:13
21 juil. 2008 à 14:13
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
21 juil. 2008 à 14:35
21 juil. 2008 à 14:35
moi, j'utilise la biblothèque pthread pour les thread.
il suffit de définir le thread comme étant séparer et joignable lors de ça création.
Comme tu es sous Unix, utilise les commandes 'man' :
man pthread_create
et ensuite, tu as des liens à l'intérieur
il suffit de définir le thread comme étant séparer et joignable lors de ça création.
Comme tu es sous Unix, utilise les commandes 'man' :
man pthread_create
et ensuite, tu as des liens à l'intérieur
ahmed.ben.salem
Messages postés
86
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
28 avril 2009
4
25 juil. 2008 à 10:31
25 juil. 2008 à 10:31
Bonjour;
Merci pour l'information, de toute façon moi c que je cherche et que l'algorithme qui fait appel a un thread termine l'exécution des instructions qui sont après l'appel :
Exemple :
fonction( ) {
.......
appel_threadA
Reste des instructions
}
Içi je veux que ma fonction appel le ThreadA et en meme temps je veux l'exécution des reste des instructions
Merci d'avance.
Merci pour l'information, de toute façon moi c que je cherche et que l'algorithme qui fait appel a un thread termine l'exécution des instructions qui sont après l'appel :
Exemple :
fonction( ) {
.......
appel_threadA
Reste des instructions
}
Içi je veux que ma fonction appel le ThreadA et en meme temps je veux l'exécution des reste des instructions
Merci d'avance.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
25 juil. 2008 à 11:44
25 juil. 2008 à 11:44
?
Sri Lumpa
Messages postés
177
Date d'inscription
mercredi 14 novembre 2007
Statut
Membre
Dernière intervention
1 juin 2010
68
25 juil. 2008 à 13:32
25 juil. 2008 à 13:32
Be c'est justement le principe... Quand tu crées un thread, il va exécuter une fonction ou des instructions en parallèle alors que la suite du code continue... Le pthread_create va créer un "processus" (je vais me faire tuer en disant ça.... ^^) qui va s'exécuter parallèlement au reste du code de ton programme principal...
Après, comme le dit Char Sniper, man pthread_create et man pthread sont tes amis
Après, comme le dit Char Sniper, man pthread_create et man pthread sont tes amis
ahmed.ben.salem
Messages postés
86
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
28 avril 2009
4
29 juil. 2008 à 13:31
29 juil. 2008 à 13:31
Bonjour;
Je m'excuse pour se retard, voila les amis un exemple qui repond a mon besoin, içi je veux l'affichage suivant :
Bonjour Tout le monde.
Mais cet exemple il m'affiche : Tout le monde Bonjour. :(:(
qq peut m'aider.
////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
volatile int ok = 0;
void* affichage () {
while (ok != 1) { }
printf(" Tout le monde \n ");
return NULL;
}
int main (void) {
pthread_t filsA;
if (pthread_create(&filsA, NULL, affichage, "AA")) {
perror("pthread_create");
exit(EXIT_FAILURE);
}
if (pthread_join(filsA, NULL))
perror("pthread_join");
printf(" \n Bonjour ");
ok = 1;
return 0;
}
///////////////////////////////////
Merci d'avance.
Je m'excuse pour se retard, voila les amis un exemple qui repond a mon besoin, içi je veux l'affichage suivant :
Bonjour Tout le monde.
Mais cet exemple il m'affiche : Tout le monde Bonjour. :(:(
qq peut m'aider.
////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
volatile int ok = 0;
void* affichage () {
while (ok != 1) { }
printf(" Tout le monde \n ");
return NULL;
}
int main (void) {
pthread_t filsA;
if (pthread_create(&filsA, NULL, affichage, "AA")) {
perror("pthread_create");
exit(EXIT_FAILURE);
}
if (pthread_join(filsA, NULL))
perror("pthread_join");
printf(" \n Bonjour ");
ok = 1;
return 0;
}
///////////////////////////////////
Merci d'avance.
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
29 juil. 2008 à 14:37
29 juil. 2008 à 14:37
ba oui, logique !
tu attend que ton thread se finisse (pthread_join) avant de dire bonjour.
Met le pthread_join juste avant le return, ça a des chances de fonctionner.
Mais il faut savoir que l'exécution est alors un peu aléatoire dans ce genre de chose ; faire deux choses en parallèle ne signifie pas qu'elle avancent à la même vitesse ni dans un ordre bien établie. ça intriduit un peu d'aléatoire dans le programme.
tu attend que ton thread se finisse (pthread_join) avant de dire bonjour.
Met le pthread_join juste avant le return, ça a des chances de fonctionner.
Mais il faut savoir que l'exécution est alors un peu aléatoire dans ce genre de chose ; faire deux choses en parallèle ne signifie pas qu'elle avancent à la même vitesse ni dans un ordre bien établie. ça intriduit un peu d'aléatoire dans le programme.
ahmed.ben.salem
Messages postés
86
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
28 avril 2009
4
29 juil. 2008 à 14:44
29 juil. 2008 à 14:44
re;
donc qu'est ce que je doit faire, pour qu'il m'affiche "Bonjour Tout le monde".
Merci
donc qu'est ce que je doit faire, pour qu'il m'affiche "Bonjour Tout le monde".
Merci
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
29 juil. 2008 à 14:49
29 juil. 2008 à 14:49
printf("Bonjour Tout le monde");
y a pas à tortiller du cul pour aller droit, si tu veux une exécution séquentielle fait ça en séquentielle : laisse tomber les thread.
y a pas à tortiller du cul pour aller droit, si tu veux une exécution séquentielle fait ça en séquentielle : laisse tomber les thread.
ahmed.ben.salem
Messages postés
86
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
28 avril 2009
4
29 juil. 2008 à 14:58
29 juil. 2008 à 14:58
Re;
mais l'alogo que j'ai le donné c'est juste un exemple. Car je veux utiliser mon thread dans un truc ou je veux faire un réception des donnée ( Via HTTP protocole ) et le temps ou je veux faire la réception je veux en même temps faire des analyse de données que je les reçu.
Merci de m'avoir aidez (même de me donnée une solution pour l'algo se dessus).
mais l'alogo que j'ai le donné c'est juste un exemple. Car je veux utiliser mon thread dans un truc ou je veux faire un réception des donnée ( Via HTTP protocole ) et le temps ou je veux faire la réception je veux en même temps faire des analyse de données que je les reçu.
Merci de m'avoir aidez (même de me donnée une solution pour l'algo se dessus).
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
29 juil. 2008 à 15:28
29 juil. 2008 à 15:28
ben, à ce moment là, il faut imbriquer des boucles.
Tu lance ton thread de reception, chaque fois qu'il reçoit une donnée il incrémente une variable globale, et ensuite tu fait une boucle while qui détecte quand cette variable change et dès qu'elle change (nouvelles données dispo) tu fait un traitement, sinon tu attends un peu. L'algo serait :
Lancer le thread de reception
Tant que la reception n'est pas fini et que tout les données ne sont pas traitées
si Il y a des données non traité alors :
traité les données non traité
effacer les données traitées de la liste de traitement.
sinon
attendre un certain temps de nouvelles données (x ms)
fin "si"
fin "tant que"
Tu lance ton thread de reception, chaque fois qu'il reçoit une donnée il incrémente une variable globale, et ensuite tu fait une boucle while qui détecte quand cette variable change et dès qu'elle change (nouvelles données dispo) tu fait un traitement, sinon tu attends un peu. L'algo serait :
Lancer le thread de reception
Tant que la reception n'est pas fini et que tout les données ne sont pas traitées
si Il y a des données non traité alors :
traité les données non traité
effacer les données traitées de la liste de traitement.
sinon
attendre un certain temps de nouvelles données (x ms)
fin "si"
fin "tant que"
ahmed.ben.salem
Messages postés
86
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
28 avril 2009
4
29 juil. 2008 à 15:49
29 juil. 2008 à 15:49
Re;
Oui merci pour la réponse, mais moi j'ai l'olgo, et mon problème comment je peut faire sa avec le thread, c'est le fait de répondre a mon exemple d'affichage c'est exactement sa ( Afficher : " Bonjour Tout le monde") au lieu de "Tout le monde bonjour " :(:(:( )
Merci d'avance.
Oui merci pour la réponse, mais moi j'ai l'olgo, et mon problème comment je peut faire sa avec le thread, c'est le fait de répondre a mon exemple d'affichage c'est exactement sa ( Afficher : " Bonjour Tout le monde") au lieu de "Tout le monde bonjour " :(:(:( )
Merci d'avance.
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
29 juil. 2008 à 15:58
29 juil. 2008 à 15:58
Arg !!!
Non, ça n'as rien à voir !! Là tu pose un problème de séquence avec printf, tu veux que "bonjour" arrive avant "tout le monde".
avec ton truc HTTP, à chaque fois que tu reçois un nouveau paquet de donnée, tu le met en pile dans une variable, puis tu incrémente une autre variable (ok par exemple)
ensuite dans ta boucle tant que (while) tu utilise une autre variable, si cette variable es inférieur à "ok" alors tu traite un paquet de donné puis tu incrémentes la variable du tant que.
Essai ça, peut être ça donnera ce que tu veux :
Non, ça n'as rien à voir !! Là tu pose un problème de séquence avec printf, tu veux que "bonjour" arrive avant "tout le monde".
avec ton truc HTTP, à chaque fois que tu reçois un nouveau paquet de donnée, tu le met en pile dans une variable, puis tu incrémente une autre variable (ok par exemple)
ensuite dans ta boucle tant que (while) tu utilise une autre variable, si cette variable es inférieur à "ok" alors tu traite un paquet de donné puis tu incrémentes la variable du tant que.
Essai ça, peut être ça donnera ce que tu veux :
#include <stdio.h> #include <stdlib.h> #include <pthread.h> int ok = 0; void* affichage () { while (ok != 1) { sleep(100); }// faire un while complétement vide va te bouffer tout ton CPU, et c'est pas le but printf(" Tout le monde \n "); return NULL; } int main (void) { pthread_t filsA; if (pthread_create(&filsA, NULL, affichage, "AA")) { perror("pthread_create"); exit(EXIT_FAILURE); } printf(" \n Bonjour "); ok = 1; if (pthread_join(filsA, NULL))// là tu attends la fin d'exécution du thread avant de sortir de la fonction main perror("pthread_join"); return 0; }
ahmed.ben.salem
Messages postés
86
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
28 avril 2009
4
29 juil. 2008 à 16:11
29 juil. 2008 à 16:11
Re;
Bon je t'explique mieux :
Pour la fonction callback tout est bon et tout va bien, je reçois les données mais la je veux faire d'autre instruction en parallèle lors du réception des données qui est l'utilité de thread ( en fait l'utilité du thread est de le Streaming : injection des données son dans le canal Client :) ).
Merci d'avance.
Bon je t'explique mieux :
Fonction_thread() { adr : si non_Fin Tanq'il y a des données reçus; faire des traitements sur Mem_reçu ; Fintantque attentd qq seconde et goto adr finsi } Callback_reception() { Reception des données si la premiere_foi si taille de données est attein faire appel au thread finsi finsi } fonc_principal() { faire ds appel cyclique a la fonction callback; }
Pour la fonction callback tout est bon et tout va bien, je reçois les données mais la je veux faire d'autre instruction en parallèle lors du réception des données qui est l'utilité de thread ( en fait l'utilité du thread est de le Streaming : injection des données son dans le canal Client :) ).
Merci d'avance.
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
29 juil. 2008 à 16:56
29 juil. 2008 à 16:56
je pense que ton algo n'est pas terrible.
ahmed.ben.salem
Messages postés
86
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
28 avril 2009
4
29 juil. 2008 à 17:08
29 juil. 2008 à 17:08
Re;
De ma part si c'est pas terrible prk chui sur le Forum, donc je trouve pas une solution (pour faire l'exécution de deux programmes en même temps) STP si ta une solution pour faire sa je t'attend et sa me fait beaucoup plaisir (mem juste pour l'algo de "Bonjour Tout le monde".
Merci
:(:(
De ma part si c'est pas terrible prk chui sur le Forum, donc je trouve pas une solution (pour faire l'exécution de deux programmes en même temps) STP si ta une solution pour faire sa je t'attend et sa me fait beaucoup plaisir (mem juste pour l'algo de "Bonjour Tout le monde".
Merci
:(:(
Sri Lumpa
Messages postés
177
Date d'inscription
mercredi 14 novembre 2007
Statut
Membre
Dernière intervention
1 juin 2010
68
29 juil. 2008 à 18:48
29 juil. 2008 à 18:48
Si tu veux bloquer l'exécution d'un thread tout en attendant un événement et reprendre l'exécution dès qu'un événement particulier arrive, tu peux utiliser des sémaphores. Je ne me rappelle plus trop la syntaxe mais en gros ça permet de signaler à un programme de se mettre en attente ou de continuer son exécution.
ahmed.ben.salem
Messages postés
86
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
28 avril 2009
4
29 juil. 2008 à 19:09
29 juil. 2008 à 19:09
Re;
En fait c'est une chose comme le sémaphore, je veux créé un thread qui s'exécute après un temps, et la dans mon algorithme principale je termine l'exécution de mes instructions, donc mon problème c'est :
je veux dans cet exemple faire appel a un mon thread et la fonction "ma_fuction()" termine l'exécution des reste des instructions.
Merci d'avance.
En fait c'est une chose comme le sémaphore, je veux créé un thread qui s'exécute après un temps, et la dans mon algorithme principale je termine l'exécution de mes instructions, donc mon problème c'est :
mon_thread() { } ma_function() ........ appel mon_thread ... Reste des instruction }
je veux dans cet exemple faire appel a un mon thread et la fonction "ma_fuction()" termine l'exécution des reste des instructions.
Merci d'avance.
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
30 juil. 2008 à 09:05
30 juil. 2008 à 09:05
As tu essayé ma correction de "bonjour tout le monde" ?
Dans le message 12, je t'ai donné un exemple d'algo.
Dans le message 12, je t'ai donné un exemple d'algo.