[C+ncurses] un getch() derriere select()
Résolu
Fricky42
Messages postés
566
Statut
Membre
-
Fricky42 Messages postés 566 Statut Membre -
Fricky42 Messages postés 566 Statut Membre -
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 :
* 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 =).
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 =).
A voir également:
- [C+ncurses] un getch() derriere select()
- Prise antenne derriere tv cassé - Forum Box et Streaming vidéo
- Embout du cable antenne cassé - Forum Téléviseurs
- Poisson derriere la voiture - Accueil - Maison
- Savoir qui est derriere un compte tiktok - Forum Vos droits sur internet
- Please select boot device - Forum Windows