[C+ncurses] un getch() derriere select()

Résolu
Fricky42 Messages postés 466 Date d'inscription   Statut Membre Dernière intervention   -  
Fricky42 Messages postés 466 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je suis en train de dev un client IRC en c avec les ncurses et je phase depuis hier sur un probleme.

Prenons juste la fonction get_keyboard recuperant les touches du clavier et les printant dans la fenetre de saisie.
J'utilise un select me permettant de check 2 fd : le fd du server et l'entree standart. Cela afin que, lorsque le mec est en train de taper et que son client recoit un message du server (genre un message d'un autre membre) celui ci s'affiche dans la fenetre de discussion tout de suite.
Le probleme etant que non seulement aucun message du serveur ne saffiche sans que le gars press ENTER, mais en plus il y a un decalage dans l'affichage du message que le client tape dans la fenetre de saisie.

Voici le bout de code concerne :

while (42)
    {
      FD_ZERO(&readf);
      FD_SET(0, &readf);
      FD_SET(gl_sfd, &readf);
      if (select(gl_sfd + 1, &readf, NULL, NULL, NULL) == -1)
        mvwprintw(gl_msg, gl_line++, 0, "*** %s", strerror(errno));
      else
        {
          if (FD_ISSET(0, &readf))
            {
              if (p.col == COLS - 1)
                {
                  p.col = 1;
                  move(++(p.line), p.col);
                }
              noecho();
              c = getch();
              if (do_keyboard(buf[0], str, &p, size) == RT_FAILURE)
                return ;
            }
          if (FD_ISSET(gl_sfd, &readf)
              && xrecv(gl_sfd, str_recv, KSIZE) > 0)
            gl_line += print_str(gl_msg, gl_line, 0, str_recv);
        }
    }


* Ne prenez pas attention a la fonction do_keyboard, elle ne fait en gros qu'un addch()
* Je soupconne une mauvaise utilisation de select() et getch(), qui est bloquant, de provoquer ce decalage...

Avez vous une idee du probleme ?

Merci =).

1 réponse

epi42
 
il n y a pas d astek pour t aider? ;)
0
Fricky42 Messages postés 466 Date d'inscription   Statut Membre Dernière intervention   182
 
Beuh non... Mais c'est bon c'est regle =). Mauvaise utilisation de select()... stout.

0