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

  FORUM HardWare.fr
  Programmation
  C++

  utilisation de select() / fd_set() et autres joyeusetés sous linux

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

utilisation de select() / fd_set() et autres joyeusetés sous linux

n°2184527
croustibat​31
Posté le 06-04-2013 à 21:17:07  profilanswer
 

Salut les pros !
 
J'ai en quelques sortes un soucis algorithmique.
 
en gros, dans un thread, j'ai une map<FD, evenement> ;
 
Je fais un select() bloquant sur un fd_set contenant lesdits FDs en lecture (rien pour ecriture et exception):
 
res = select(nfds +1, &monFdset, NULL,NULL,NULL);
 
Et derriere j'ai une méthode TraiteEvenement(evenement).
 
Mon soucis c'est que la seule chose que je connaisse pour traiter des fd_set, c'est la macro FD_ISSET(fd, fdset) qui me dit si oui ou non le fd passé en parametre est dans fdset. Et j'aimerai éviter d'itérer a travers chaque evenement de ma map pour trouver les seuls qui sont déclenchés...
 
j'aimerai en gros faire :

Code :
  1. for (int i = 0 ; i<res; i++)
  2. {
  3. TraiteEvenement(maMap[monFdset[i]]);
  4. }


 
et pas :
 

Code :
  1. for (int i = 0; i <maMap.size();i++)
  2. {
  3. if (FD_ISSET(i,monFdSet)
  4. {
  5. TraiteEvenement(maMap[i]);
  6. }
  7. }


 
Mais apparamment c'est pas aussi simple que ca ...
 
Y'a un bon connaisseur de fd_set dans la salle ?
 
merci d'avance :jap:

mood
Publicité
Posté le 06-04-2013 à 21:17:07  profilanswer
 

n°2184537
Farian
Posté le 06-04-2013 à 21:40:35  profilanswer
 

Bonjour !
 
Pour utiliser régulièrement select, et donc les macros FD_ associées,  
non, il n'y a pas d'autres moyens.  
 
Mais est-ce vraiment un problème ?  
 
Par ailleurs, le code dans votre deuxième exemple est incorrect, vous devez utiliser un itérateur (même si j'imagine que c'est pour l'illustration que vous le donnez :) )
 
Bonne continuation !

n°2184539
croustibat​31
Posté le 06-04-2013 à 22:21:33  profilanswer
 

Merci pour l'info, meme si elle ne m'arrange pas :/
 
 
Pour ce qui est de la map, normalement pas besoin d'iterator, la clé de la map est le FD associé a l'évènement, et map a operator[] défini; normalement maMap[monFD] devrait me retourner l'évenement que je voulais associer à mon Fd ;)
 

n°2184564
Joel F
Real men use unique_ptr
Posté le 07-04-2013 à 10:00:33  profilanswer
 

si tu travailles en C++, je te conseille plutot de jeter un oiel a Boost.ASIO qui fait ca proprement et utilise le bon modele de prog (a savoir celui d'agent evenementiel)

n°2184652
croustibat​31
Posté le 07-04-2013 à 22:43:29  profilanswer
 

Pas de boost dans mes programmes, c'est impossible a maintenir :/
 

n°2184758
Joel F
Real men use unique_ptr
Posté le 08-04-2013 à 15:50:06  profilanswer
 

je rofl un peu mais passons

n°2184898
ITM
Avatar peint à la main
Posté le 09-04-2013 à 10:53:21  profilanswer
 

+1 pour boost asio.
Mieux vaut utiliser une lib largement éprouvée et prévue pour ce que tu veux faire, plutot que de tenter de la reinventer.
Au final, tu vas pondre beaucoup plus de lignes de codes, qui elles pour le coup seront bien plus pénibles à maintenir  [:spamafote]


---------------
iteme.free.fr | Mon feedback
n°2184915
Joel F
Real men use unique_ptr
Posté le 09-04-2013 à 11:11:11  profilanswer
 

in before "j'arrive pas l'installer"

n°2185096
snafu8
Posté le 10-04-2013 à 09:58:17  profilanswer
 

<avocat du diable>
Si suffisament de gens se plaignent de ce qu'ils n'arrivent pas à comprendre comment installer/utiliser boost, c'est pas un problème d'utilisateur, c'est un problème de doc.
</avocat du diable>

n°2185107
Joel F
Real men use unique_ptr
Posté le 10-04-2013 à 11:15:59  profilanswer
 

la doc d'ASIO fait partie des plus fournies par contre.
Ensuite, le Getting Started est quand meme bien foutu.
 
Le probleme c'est les gens habitues au cliquodrome

mood
Publicité
Posté le 10-04-2013 à 11:15:59  profilanswer
 

n°2185112
Volkhen
Posté le 10-04-2013 à 11:38:02  profilanswer
 

snafu8 a écrit :

<avocat du diable>
Si suffisament de gens se plaignent de ce qu'ils n'arrivent pas à comprendre comment installer/utiliser boost, c'est pas un problème d'utilisateur, c'est un problème de doc.
</avocat du diable>


Je me suis mis au C++ il y a 2 ou 3 mois. Sur windows avec mingw32 au lieu de visual studio : boost n'est pas la lib qui m'a posé le plus de problèmes  :o  
Ne serait-ce que pour program_options, Boost poutre.


---------------
Main/Alt1/Alt2/Alt3
n°2185120
snafu8
Posté le 10-04-2013 à 11:47:37  profilanswer
 

@JoelF : je suis pas franchement convaincu que tu sois le plus a meme de juger de l'accessibilité d'un getting started.
@Volkhen, soit, mais ton exemple personnel reste un exemple particulier. Tout ce que je dis c'est que si un nombre significatif d'utilisateurs galèrent avec l'installation ou la configuration de boost, le problème est avant tout un problème de doc et de pédagogie.

n°2185233
ITM
Avatar peint à la main
Posté le 10-04-2013 à 18:34:37  profilanswer
 

Non mais bon, un petit truc du genre "apt-get install libboost-dev" et c'est fini quoi  [:mlc]
Après si vous faîtes de la prog système dans des environnements exotiques, c'est déjà un peu foutu d'avance :o


---------------
iteme.free.fr | Mon feedback
n°2185706
docmaboul
Posté le 13-04-2013 à 08:11:26  profilanswer
 

snafu8 a écrit :

@JoelF : je suis pas franchement convaincu que tu sois le plus a meme de juger de l'accessibilité d'un getting started.
@Volkhen, soit, mais ton exemple personnel reste un exemple particulier. Tout ce que je dis c'est que si un nombre significatif d'utilisateurs galèrent avec l'installation ou la configuration de boost, le problème est avant tout un problème de doc et de pédagogie.


 
heu... si un dev n'arrive pas à s'en sortir avec boost, c'est qu'il doit se remettre en question et changer de langage: le c++ n'est pas fait pour lui. Le php sera probablement plus adapté.


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

  utilisation de select() / fd_set() et autres joyeusetés sous linux

 

Sujets relatifs
[C#] Utilisation de Google CalendarAide pour faire suivre un select case sur plusieurs cellules
[java]MyBatis - Utilisation de DAO génériques[Résolu]Utilisation formulaire
Select + rand uniqueComment créer un dossier avec des espaces en Java sous Linux ?
relation entre script bat et linux[RESOLU][DELPHI] Utilisation de la Scrollbar
Interpréter une séquence d'échappement sur Gnu/Linux 
Plus de sujets relatifs à : utilisation de select() / fd_set() et autres joyeusetés sous linux


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR