Derniers journaux de mrlem :

Journal : C, GTK, Threads, sockets & rock and roll

Posté par Sebastien Guillemin (page perso, ) le 09 novembre 2003
0
Cher Journal,

Je 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).  

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.

Re: C, GTK, Threads, sockets & rock and roll

Posté par Moby-Dik () le 09/11/2003 à 19:21. (lien). Évalué à 4.

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

Posté par Fabien Seisen () le 09/11/2003 à 19:23. (lien). Évalué à 3.

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

Posté par gnumdk (page perso, ) le 09/11/2003 à 19:57. (lien). Évalué à 2.

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

Posté par Tennis Prono (page perso, ) le 10/11/2003 à 07:47. (lien). Évalué à 1.

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.

Revenir en haut de page