[C+ncurses] un getch() derriere select()
Résolu
Fricky42
Messages postés
489
Date d'inscription
Statut
Membre
Dernière intervention
-
Fricky42 Messages postés 489 Date d'inscription Statut Membre Dernière intervention -
Fricky42 Messages postés 489 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 :
* 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()
- Please select boot device - Forum Matériel & Système
- Dans le document à télécharger, trouvez les lettres situées derrière les rectangles pour reconstituer le nom du chat. comment s'appelle-t-il ? - Forum InDesign
- Poisson derriere la voiture - Accueil - Maison
- Savoir qui est derriere un compte tiktok - Forum Vos droits sur internet
- Select boot mode android - Guide