Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4726 connectés 

  FORUM HardWare.fr
  Programmation
  C

  thread écoutant hal (spécifique à linux)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

thread écoutant hal (spécifique à linux)

n°1366457
Photonium
Masse atomique : 0 uma
Posté le 15-05-2006 à 14:07:49  profilanswer
 

Bonjour,
 
Dans mon programme, je lance un thread qui 'ecoute' une variable globale (que je met à jour par l'intermédiaire de l'interface de hal) . Le problème est que pour l'instant, mon thread boucle avec un

Code :
  1. while(1)
  2. sleep(1);


 
Mais il semble que lorsque je fais un appel à sleep(), mon programme n'entend pas les changements faits par hal.  
 
J'ai essayé de remplacer cette boucle par gtk_main() mais d'abord c'est très dégueulasse et ensuite pour quitter j'utilise gtk_main_quit() ce qui est encore plus moche (en plus de ne pas fonctionner entièrement).
 
Avez-vous une idée de comment résoudre ca ? Est-il possible d'endormir que le thread et pas le programme entièrement car j'ai l'impression que c'est cela qui se passe ?
 
Nb : si je n'ai pas été clair, faites le savoir car là, je suis à cours de batterie.
 
Edit: relecture.  :D


Message édité par Photonium le 15-05-2006 à 19:39:44

---------------
A savoir : la dimension de Hausdorff du chou-fleur a été calculée et vaut 2.33
mood
Publicité
Posté le 15-05-2006 à 14:07:49  profilanswer
 

n°1366864
Photonium
Masse atomique : 0 uma
Posté le 15-05-2006 à 19:41:09  profilanswer
 

:bounce: Je ferais des précisions dans quelques instants si je n'ai toujours pas de réponse.


---------------
A savoir : la dimension de Hausdorff du chou-fleur a été calculée et vaut 2.33
n°1366886
_darkalt3_
Proctopathe
Posté le 15-05-2006 à 20:04:26  profilanswer
 

tu veux dire que ton thread fait sleep(1) sans s'arreter et qu'il ne se met pas à jour ?


---------------
Töp of the plöp
n°1366947
Photonium
Masse atomique : 0 uma
Posté le 15-05-2006 à 21:21:28  profilanswer
 

_darkalt3_ a écrit :

tu veux dire que ton thread fait sleep(1) sans s'arreter et qu'il ne se met pas à jour ?


 
Non, il y a un test.

Code :
  1. static void mafonction (void *arg) {
  2.   pthread_detach(pthread_self());
  3. .... //initialisation  
  4.   while(1) {
  5.     if (canceled)
  6.       pthread_exit(NULL);
  7.     sleep(1);
  8.      if (received)
  9.         break;
  10.     }
  11.   DEBUGP("Received Msg\n" );
  12.    ... //traitement
  13.   DEBUGP("exited\n" );
  14.   pthread_exit(NULL);
  15. }


 
Received est positionné à 1 par un callback de Hal. (LibHalDeviceAdded pour etre plus précis)
Canceled est sans importance ici.
 
Or avec ce code, received n'est pas mis à 1 et pire que çà : LibHalDeviceAdded n'est pas appelée.  
 
Je pense donc que le sleep agit sur le programme entier et non sur le thread. Comment remédier à cela ?
 
Edit: petite précision, lorsque j'utilise gtk_main() à la place de mon while (et en modifiant un peu mon code pour avoir le même resultat), je n'ai pas ce problème de mutisme de hal. J'en au un autre du fait que ce soit gtk_main() et que je l'utilise pour ce qu'elle n'est pas.  
Avec gtk_main(), j'ai le bon comportement. Comment gtk_main() fonctionne ? Avec un systeme de while + sleep ?
 
Edit2: il semble que (selon le man), sleep n'agit que sur le process appelant. Bizarre. Infos ?


Message édité par Photonium le 15-05-2006 à 21:57:08

---------------
A savoir : la dimension de Hausdorff du chou-fleur a été calculée et vaut 2.33
n°1367480
Photonium
Masse atomique : 0 uma
Posté le 16-05-2006 à 13:52:23  profilanswer
 

Bonjour,
 
Je pense avoir trouvé. Dans mon code, j'utilise dbus_connection_setup_with_g_main(). J'utilise dbus-glib donc je présume qu'en fait, la meilleure façon (la seule façon ?)  d'écouter hal est de boucler le thread avec une boucle 'glib'.
 
Si certains d'entre vous connaissent tout ce qui touche à  Dbus/hal/glib, pouvez-vous m'éclairer un peu plus ?


---------------
A savoir : la dimension de Hausdorff du chou-fleur a été calculée et vaut 2.33

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  thread écoutant hal (spécifique à linux)

 

Sujets relatifs
tkinter et thread[Résolu] Arrêter un Thread qui attend un paquet sur un DatagramSocket
[PHP ?] Terminal Linux sur une page web[Java/JdbcObbc] Comment lire une database texte sous linux ?
Probleme syntaxe thread librairie pthreadThreads sur un serveur J2EE ? Thread en tant que Singleton?
Command shell Windows a la Linux/Unix?[URGENT] : linux
Linux / Debug avec DDDPortage d'application Linux vers Windows
Plus de sujets relatifs à : thread écoutant hal (spécifique à linux)


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)