[C] thread
Résolu/Fermé
skarsnick
Messages postés
79
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
17 décembre 2009
-
22 mars 2007 à 12:34
loupius - 6 avril 2009 à 22:13
loupius - 6 avril 2009 à 22:13
A voir également:
- [C] thread
- Thread - Accueil - Guide réseaux sociaux
- Compte thread - Accueil - Réseaux sociaux
- Thread stuck in device driver ✓ - Forum Windows 10
- C'est quoi thread instagram - Accueil - Instagram
- Thread instagram c'est quoi - Accueil - Guide arnaque
4 réponses
Stupeflip
Messages postés
391
Date d'inscription
jeudi 8 février 2007
Statut
Membre
Dernière intervention
4 décembre 2007
94
22 mars 2007 à 13:05
22 mars 2007 à 13:05
Re salut,
Et bien tu peux par exemple le modifier si nécessaire pour le faire boucler toutes les secondes. Tu n'auras qu'à lancer l'exe et voilà.
Ou alors tu peux le mettre dans les tâches planifiées de ton pc (si tu es en administrateur) et configurer la tâche pour qu'elle se lance toutes les secondes.
Les threads c'est plutôt lorsque tu veux faire différentes actions en même temps dans un même programme par exemple.
Et bien tu peux par exemple le modifier si nécessaire pour le faire boucler toutes les secondes. Tu n'auras qu'à lancer l'exe et voilà.
Ou alors tu peux le mettre dans les tâches planifiées de ton pc (si tu es en administrateur) et configurer la tâche pour qu'elle se lance toutes les secondes.
Les threads c'est plutôt lorsque tu veux faire différentes actions en même temps dans un même programme par exemple.
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
22 mars 2007 à 14:37
22 mars 2007 à 14:37
c'est parfait comme tu fait.
Tu peut éventuellmement mettre un while(true) à la place du for.
1seconde=> sleep(1000) normalement.
pour lancer au demarrage de TA session, rajoute une ligne dans un fichier de ton home, il faut trouver lequel.
".bashrc" chez moi. Mais peut être ".profile" ou ".dtprofile"
Tu peut éventuellmement mettre un while(true) à la place du for.
1seconde=> sleep(1000) normalement.
pour lancer au demarrage de TA session, rajoute une ligne dans un fichier de ton home, il faut trouver lequel.
".bashrc" chez moi. Mais peut être ".profile" ou ".dtprofile"
Stupeflip
Messages postés
391
Date d'inscription
jeudi 8 février 2007
Statut
Membre
Dernière intervention
4 décembre 2007
94
22 mars 2007 à 14:49
22 mars 2007 à 14:49
Pouet,
Non sleep() sous Linux se fait en secondes, pour mettre en millisecondes il faut faire usleep(). C'est Sleep() sous Windows qui se fait en millisecondes.
Et pareil je préfère toujours mettre un while(1) plutôt qu'un for(;;).
Non sleep() sous Linux se fait en secondes, pour mettre en millisecondes il faut faire usleep(). C'est Sleep() sous Windows qui se fait en millisecondes.
Et pareil je préfère toujours mettre un while(1) plutôt qu'un for(;;).
skarsnick
Messages postés
79
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
17 décembre 2009
59
22 mars 2007 à 15:19
22 mars 2007 à 15:19
Je suis passer en while(1)...
ca marche toujours aussi bien :):)
Je vais tester pour le fichier Home.
Ca m'a surpris le sleep en seconde, j'ai l'habitude de window$
Par contre là je suis en root et j'aimerais que ca marche quelquesoit l'utilisateur.
enfin, je teste et je vous dis;)
Merci
ca marche toujours aussi bien :):)
Je vais tester pour le fichier Home.
Ca m'a surpris le sleep en seconde, j'ai l'habitude de window$
Par contre là je suis en root et j'aimerais que ca marche quelquesoit l'utilisateur.
enfin, je teste et je vous dis;)
Merci
skarsnick
Messages postés
79
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
17 décembre 2009
59
22 mars 2007 à 16:20
22 mars 2007 à 16:20
J'ai bien trouvé le fichier qu'il faut...
Par contre je me suis auto-eu. ^^
Lancer un scrip avec un while(1) depuis ce fichier ça bloque le chargement de la suite de la config.
Je suis sûr qu'il y a moyen de détourner cela,
Un fork peut être?
(je ne sais pas l'utiliser)
Une manip de linux permettant de lancer cela en arrière plant?
(pour recentrer sur le titre :p)
Un thread ?
Vous avez une idée? :p
Merci
Par contre je me suis auto-eu. ^^
Lancer un scrip avec un while(1) depuis ce fichier ça bloque le chargement de la suite de la config.
Je suis sûr qu'il y a moyen de détourner cela,
Un fork peut être?
(je ne sais pas l'utiliser)
Une manip de linux permettant de lancer cela en arrière plant?
(pour recentrer sur le titre :p)
Un thread ?
Vous avez une idée? :p
Merci
Stupeflip
Messages postés
391
Date d'inscription
jeudi 8 février 2007
Statut
Membre
Dernière intervention
4 décembre 2007
94
22 mars 2007 à 16:37
22 mars 2007 à 16:37
Alors si j'ai bien compris, ton programme se lance, il fait un truc toutes les secondes dans une boucle, et en même temps il doit faire un autre truc c'est bien ça ?
Dans ce cas, oui un thread est une possibilité très simple à mettre en place. Tu utilises à priori pthread.h donc il te suffit de:
- déclarer ton thread
pthread_t [le nom du thread qui va lancer la boucle while];
- créer le thread sur ta fonction qui boucle
pthread_create(&nom_du_thread, NULL, (void *)fonction_while,NULL);
(le protype est : int pthread_create(pthread_t * thread, pthread_attr_t * attr, void * (*start_routine)(void *), void * arg); )
- continuer la suite de ton programme
- tu peux à la fin pour fermer proprement ajouter un pthread_join(nom_du_thread); qui fera que ton programme principal attendra la fin du thread pour se terminer effectivement. Tu auras pris soin avant d'indiquer à ton thread de se terminer, par exemple avec une variable globale que tu passes à 1, provoquant un pthread_exit de la part du thread while.
Dans ce cas, oui un thread est une possibilité très simple à mettre en place. Tu utilises à priori pthread.h donc il te suffit de:
- déclarer ton thread
pthread_t [le nom du thread qui va lancer la boucle while];
- créer le thread sur ta fonction qui boucle
pthread_create(&nom_du_thread, NULL, (void *)fonction_while,NULL);
(le protype est : int pthread_create(pthread_t * thread, pthread_attr_t * attr, void * (*start_routine)(void *), void * arg); )
- continuer la suite de ton programme
- tu peux à la fin pour fermer proprement ajouter un pthread_join(nom_du_thread); qui fera que ton programme principal attendra la fin du thread pour se terminer effectivement. Tu auras pris soin avant d'indiquer à ton thread de se terminer, par exemple avec une variable globale que tu passes à 1, provoquant un pthread_exit de la part du thread while.
skarsnick
Messages postés
79
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
17 décembre 2009
59
>
Stupeflip
Messages postés
391
Date d'inscription
jeudi 8 février 2007
Statut
Membre
Dernière intervention
4 décembre 2007
22 mars 2007 à 17:01
22 mars 2007 à 17:01
En faite mon programme regarde toutes les secondes l'état d'un fichier, c'est tout :)
Mais si je le met dans le bashrc, cela bloque au démarage car pour effectuer la suite du bashrc, il attend d'avoir finis mon while(1) =)
je vais essayer un thread alors
Merci
Mais si je le met dans le bashrc, cela bloque au démarage car pour effectuer la suite du bashrc, il attend d'avoir finis mon while(1) =)
je vais essayer un thread alors
Merci
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
23 mars 2007 à 08:45
23 mars 2007 à 08:45
je ne pense pas qu'un thread change quoi que ce soit. Donc ne te prend pas la tête avec ça.
un thread permet l'execution parallèle, mais ne libère pas le processus, donc tu restera bloquer, car le shell attend que le processus se termine.
En fait, il faut dire au shell d'executer le programme mais de ne pas attendre qu'il se termine.
En mode console, cela se fait aisément en ajoutant '&' à la fin de la ligne. Il faut tester si ça fonctionne aussi à l'intérieur d'un script.
Si le '&' ne fonctionne pas, plutôt q'un thread, utilise exec, ou system ou relance un script qui relancera ton programme.
pour le mettre à tout les utilisateur, il doit y avoir un .bashrc commun à tous, reste à le trouvé (/usr ... ?)
un thread permet l'execution parallèle, mais ne libère pas le processus, donc tu restera bloquer, car le shell attend que le processus se termine.
En fait, il faut dire au shell d'executer le programme mais de ne pas attendre qu'il se termine.
En mode console, cela se fait aisément en ajoutant '&' à la fin de la ligne. Il faut tester si ça fonctionne aussi à l'intérieur d'un script.
Si le '&' ne fonctionne pas, plutôt q'un thread, utilise exec, ou system ou relance un script qui relancera ton programme.
pour le mettre à tout les utilisateur, il doit y avoir un .bashrc commun à tous, reste à le trouvé (/usr ... ?)
skarsnick
Messages postés
79
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
17 décembre 2009
59
23 mars 2007 à 10:06
23 mars 2007 à 10:06
Un petit & à la fin de la ligne c'est vrai que je n'y avait pas pensé, c'est tout bête et pourtant ça marche super bien,
Bref problème résolu, merci à tous pour votre aide =)
Bref problème résolu, merci à tous pour votre aide =)
salut, toutle mond
j'ai pas cmpris qu est ce que le thread ??????????????
comment appliquer le thread dans la programmation en c++ ??????????
merci davance
j'ai pas cmpris qu est ce que le thread ??????????????
comment appliquer le thread dans la programmation en c++ ??????????
merci davance
22 mars 2007 à 14:14
En faite j'aimerais qu'il tourne sans arrêt, toutes les secondes et cela depuis la démarage de mon pc,
j'ai une distribution Fedora core 4, et heu...
Je ne sais pas faire grand chose sous linux...
Pour le moment je le lance avec une boucle for et un sleep(1)
Il faudrait peut être transformer cela en while...
mais comment le lancer dès le démarage de la distrib?
Merci de tes aides précieuses ;)