thread persistant - C - Programmation
Marsh Posté le 03-02-2006 à 21:48:28
désolé, clic malencontreux...
j'ai un automate logiciel développé en C. Celui-ci qui rafraîchit des entrées, exécute des grafcets puis actionne des sorties sur une période de 10ms. Certaines fonctions nécessaires au bon fonctionnement sont blocantes (jusqu'à 500ms...). D'où la nécessité de détacher ces fonctions blocantes dans un thread indépendant.
voilà le code :
Code :
|
et le code appelant :
Code :
|
mon problème (s'il en est un...) c'est que lorsque j'appelle la commande ps -au, je constate que le thread fils est toujours présent, y compris après le temps théorique de durée de vie. Quelqu'un a-t-il une explication? quels sont les dangers? des conseils à m'apporter?
merci
Marsh Posté le 14-02-2006 à 10:55:57
up svp
Marsh Posté le 14-02-2006 à 11:06:41
lorsque tu crées un thread sous linux sans passer de parametre, il est par défaut en mode normal, il faut donc appeler la fonction pthread_join pour liberer la ressource.
Tu peux par contre créer des threads en mode détaché, ils sont libéré dès que la fonction de thread se termine. En contrepartie, il me semble que tu ne peux pas faire un certain type d'opération sur le thread (comme suspendre le thread ).
pour créer un thread en mode détaché,voici comment je fais :
Code :
|
Les dangers : si ton thread n'est pas libéré, tu peux atteindre facilement la limite (MAX_THREADS qui doit valoir 1024) , et donc ne plus avoir la possibilité de créer un thread supplémentaire.
Marsh Posté le 14-02-2006 à 12:10:11
merci
est-ce que le thread en mode détaché a toujours accès aux variables globales du code appelant?
Marsh Posté le 14-02-2006 à 12:16:50
bipeuh a écrit : merci |
il a accès aux mêmes choses qu'un thread créé normalement. En général, je passe en paramètre les variables sur lesquelles le thread doit travailler.
Marsh Posté le 14-02-2006 à 12:52:37
Marsh Posté le 14-02-2006 à 13:05:42
Code :
|
peux-tu m'en dire plus au sujet du 'this'?
Marsh Posté le 14-02-2006 à 13:43:05
oups désolé. J'ai fait un copier-coller de mon code source. this ,c'est du C++. Je reformule mon post puisqu'on est dans la catégorie C:
Voici un exemple qui crée un thread en mode détaché, et un thread en mode normal. Le dernier paramètre de la fonction pthread_create contient l'adresse des paramètres que tu souhaites passer (souvent une structure, mais pas nécessairement, et peut etre NULL si on n'a pas besoin de passer de paramètre).
Code :
|
Marsh Posté le 14-02-2006 à 16:42:06
Merci pour ton exemple. Peux-tu me dire si ces deux méthodes sont équivalentes ou pas (mode détaché)?
Code :
|
Marsh Posté le 03-02-2006 à 21:35:09
j'
Message édité par bipeuh le 03-02-2006 à 22:01:53
---------------
celui qui pose une question est idiot 5 minutes, celui qui n'en pose pas le reste toute sa vie.