[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 -
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 :
* 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
- Please select boot device - Forum Windows
- Embout du cable antenne cassé - Forum Téléviseurs
- Poisson derriere la voiture - Accueil - Maison
- Reboot and select proper boot device asus - Forum Matériel & Système