Yunchi
Messages postés100Date d'inscriptionlundi 30 octobre 2006StatutMembreDernière intervention14 avril 2009
-
6 juil. 2007 à 08:58
Yunchi
Messages postés100Date d'inscriptionlundi 30 octobre 2006StatutMembreDernière intervention14 avril 2009
-
8 juil. 2007 à 09:31
Bonjour,
Je suis actuellement sur un programme utilisant la bilbiotheque gtk. J'ai une zone de texte (gtk_text_view_new()) et j'aimerais afficher du texte dedans mais en temps reel.
Je m'explique : jai un fichier FILE* qui contient par exemple une lettre et ce fichier est modifie en continu par un programme. J'aimerais alors afficher dans ma zone de texte les lettres au fur et a mesure en temps reel.
Si quelqu'un peut m'expliquer la methode a suivre je l'en remercie d'avance.
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 7 juil. 2007 à 23:39
luthor -> Y a des libs graphiques qui propose ce qu'il faut : la VCL avec synchronize, et les Winforms, avec invoke. (Mais bon c'est sûr que c'est pas un avantage transcendant sur gtk.)
Vous n’avez pas trouvé la réponse que vous recherchez ?
katsankat
Messages postés571Date d'inscriptionvendredi 30 décembre 2005StatutMembreDernière intervention12 juillet 20123 8 juil. 2007 à 09:16
OK.
C'est une méthode comme une autre. Comme souvent en informatique il existe plusieurs moyens d'arriver au même résultat. Celle du thread+timer est probablement plus répandue et en tout cas elle tient la route.
Le multiplexage d'entrées-sorties synchrone consiste à demander au système d'exploitation (appel système 63 sous linux) de placer des descripteurs de fichier en observation et de nous prévenir quand des données sont disponibles en lecture, ou en écriture (c'est une bonne alternative aux threads et aux sockets non-bloquants pour l'écriture de serveurs où on a besoin de traiter ce qui rentre et ce qui sort sans bloquer).
Le fonctionnement de select() repose sur l' utilisation d'une structure fd_set qui est un tableau d'index constituée de 1024 bits. La structure comporte aussi un membre fd_count qui dit combien de descripteurs sont actuellement en observation dans le fd_set. (attention sous wondows la structure est différente, car microsoft différents dans leur implémentation -pardon appropriation- des standards comme d'habitude).
On crée un fd_set puis le remplit de zéros avec la macro FD_ZERO.
On ajoute un descripteur de fichier à un fd_set avec la macro FD_SET, macro FD_CLR pour le retirer.
Quand le fd_set est prêt, le fait d'invoquer le fonction select:
int select(int n, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);
... Détermine sur quels descripteurs de fichiers des données sont disponibles en lecture, en écriture, et exceptions. Dans ton cas tu pourrais passer NULL aux 3e et 4e arguments.
Après avoir invoqué select(), un coup de FD_ISSET sur le descripteur s'assure que le descripteur est bien présent dans l' ensemble. Si oui alors là tu faire un fread pour appeler ta fonction gtk_add_text.
Dans ton cas se pose aussi la question de la fréquence d'appel de select(). Tu peux le mettre dans une boucle infinie (0% CPU), ou alors faire un sleep, ou encore avec un timer ça dépend du contexte de l' appli.