Derniers journaux de mrlem :
- [10/11@15:40] On peut troller la dessus aussi ?
Journal : C, GTK, Threads, sockets & rock and roll
Posté par Sebastien Guillemin (page perso, ) le 09 novembre 2003Je programme actuellement une petite application GTK qui se doit d'écouter sur un port TCP. Jusque là aucun problème, seulement voilà, mon interface graphique permet(tra) d'arrêter cette écoute.
Et c'est là le problème : j'ai du rater un épisode, parceque je ne vois aucun moyen d'interrompre le thread (un gthread pour être précis) qui s'occupe d'écouter sur un port (pendant l'appel à accept(), bloquant donc)...
Je suppose pourtant qu'il s'agit d'une situation ultra-classique, mais une intense recherche toute la journée ne m'a pas donné grand-chose d'autre qu'un gros mal de tête.
Faut-il que je me résigne à faire du polling sur un socket non-bloquant ? faut-il que je fasse mon écoute dans un autre process, que du coup je pourrais intérrompre par le biais d'un signal ?
En te remerciant, cher Journal, pour ton indéflectible attention.
> Lire le journal (9 commentaires, moyenne: 1,8).
Re: C, GTK, Threads, sockets & rock and roll
Tu veux l'interrompre en fonction de quoi ? Habituellement on utilise une socket non-bloquante en conjonction avec un select() sur tous les files descriptors auxquels tu veux être sensible (y compris éventuellement stdin, ou un pipe avec un autre thread).
-
[^]Re: C, GTK, Threads, sockets & rock and roll
Posté par Sebastien Guillemin (page perso, ) le 09/11/2003 à 19:50. (lien). Évalué à 1.Merci beaucoup, cela devrait faire parfaitement l'affaire !
Je n'avais pas très bien compris l'utilité de select(), ce qui fait que j'étais passé à côté.
Allez, hop, suite du programme.
Encore merci (et à Fabien Seisen aussi d'ailleurs).
-
[^]Re: C, GTK, Threads, sockets & rock and roll
Posté par Sebastien Guillemin (page perso, ) le 11/11/2003 à 23:00. (lien). Évalué à 1.Screugneugneu : un détail qui tue. Comme je traine le boulet de la compatibilité Windows, j'aurais tendance à dire que l'on ne peut utiliser select() que sur des sockets sur ce 'charmant' système. Le fait de l'utiliser sur un pipe génère une belle erreur...
Exit donc cette solution pourtant fort élégante :o(
Re: C, GTK, Threads, sockets & rock and roll
fait qque chose du genre: while (continue) { select(socket) // man 2 select if (qque_chose_a_lire) { accept(socket) } }
Re: C, GTK, Threads, sockets & rock and roll
http://developer.gimp.org/api/1.3/glib/glib-IO-Channels.html(...)
il faut utiliser ca et eviter des faires des threads...
-
[^]Re: C, GTK, Threads, sockets & rock and roll
Posté par Sebastien Guillemin (page perso, ) le 09/11/2003 à 20:17. (lien). Évalué à 1.Certes, je suis tombé dessus. Mais cette petite phrase m'a un peu effrayé :
"Currently full support is available on UNIX platforms, support for Windows is only partially complete."
dans la mesure où l'un des objectifs de mon programme est de fonctionner aussi sur Windows.
Ai-je eu tors ? je n'ai pas trouvé rapidement d'info sur le statut exact pour Windows.
Par contre, pourquoi éviter d'utiliser des threads ? Quelles alternatives existent losque l'on veut préserver la réactivité d'une appli pendant un traitement long ? Les processes ? Il me semble avoir vu que désormais GTK2 est thread-safe, non ?-
[^]Re: C, GTK, Threads, sockets & rock and roll
Posté par Sebastien Guillemin (page perso, ) le 09/11/2003 à 20:20. (lien). Évalué à 2.:s/tors/tort/
-
Re: C, GTK, Threads, sockets & rock and roll
Fermer la socket dans un autre thread ?
Pas de bureau 3d libre sans drivers libres!
-
[^]Re: C, GTK, Threads, sockets & rock and roll
Posté par Sebastien Guillemin (page perso, ) le 10/11/2003 à 09:58. (lien). Évalué à 1.Aie ! Ca n'a pas l'air très propre ça ?
Ca marche ou bien il y a des risques que le programme nous explose à la figure ?
Je crois que je vais en rester à la solution select() sur le socket et un pipe utilisé pour l'interrompre, qui de toute façon me semble plus élégante.
Les journaux sont destinés à des informations qui ne sont pas suffisamment intéressantes
pour être validées en dépêche (sinon n'hésitez pas à proposer votre information en
dépêche), qui sont sans rapport avec Linux ou le libre, ou simplement pour donner votre
avis. Si vous désirez poser une question, merci d'utiliser 

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.