Structure qui ne contient plus rien ??? [C+GTK] - C - Programmation
Marsh Posté le 25-04-2007 à 17:36:23
le tread n'est pas détruit à la fin de la fonction (question con j'en sais rien )
Marsh Posté le 25-04-2007 à 17:40:02
non, je viens de tenter de commentariser toutes les lignes de fermeture de threads et de vidage de buffer, aucun changement
Marsh Posté le 25-04-2007 à 18:12:10
Bourreau a écrit : non, je viens de tenter de commentariser toutes les lignes de fermeture de threads et de vidage de buffer, aucun changement |
Bah, il y a un bug dans ton code gtk. Sans voir le code, comment en dire plus ?
Ton code est inutilement compliqué
Code :
|
...
Code :
|
Marsh Posté le 25-04-2007 à 21:49:38
Merci pour ton aide, j'ai essayé tes modifs, aucun changement. Le sleep est en effet superflus
Voilà le code complet du fichier comportant le main :
Code :
|
En esperant que ca puisse aider Merci d'avance.
Marsh Posté le 26-04-2007 à 09:07:56
Bourreau a écrit : Merci pour ton aide, j'ai essayé tes modifs, aucun changement. Le sleep est en effet superflus |
Il manque le "include.h"
J'ai reconstitué ceci :
Code :
|
Il subsiste des warnings inquiétants :
|
Marsh Posté le 26-04-2007 à 16:54:48
Merci bcp pour ton aide. Ce n'était pas encore exactement ca, mais je m'en suis inspiré et maintenant ca fonctionne, la structure n'est plus perdue.
Mais j'ai un problème qui subsiste, j'avais pas mis cette partie dans le code ici, mais j'ai créé au dessus de la zone de saisie de texte une zone de texte de type :
pLabel = gtk_label_new(NULL);
Tjs dans l'optique du chat, cette zone doit etre mise à jour avec le contenu du chat. Seulement voilà, impossible de mettre à jour cette zone. J'ai bien récupéré une fonction de refresh, mais meme en modifiant cette zone dans le ficheir du main et en faisant un refresh derriere, ca ne fonctionne pas.
J'ai ca :
fonction de refresh :
Code :
|
Le Label du main :
Code :
|
Donc j'ai déclaré le widget du label en static tout en haut, les 3 lignes du label sont mises dans le main, et le "received" (contenu du chat, à figurer dans le label) est modifié dans une fonction, et est suivi par un :
redraw(pLabel);
Mais rien ne semble s'afficher Je fais qqch de mal ? Ne s'agit-il pas d'un label pour faire ce que je veux ? Dois-je faire le refresh autrement ?
Une fois de plus merci d'avance pour vos réponses
Marsh Posté le 26-04-2007 à 17:07:52
Bourreau a écrit : Mais j'ai un problème qui subsiste, j'avais pas mis cette partie dans le code ici, mais j'ai créé au dessus de la zone de saisie de texte une zone de texte de type :
|
Je ne connais pas assez GTK+ pour pouvoir t'aider. Il faudrait voir les spécialistes ici :
http://www.developpez.net/forums/f [...] .php?f=390
Marsh Posté le 26-04-2007 à 17:15:48
Comment impossible de mettre à jour ? Je comprends rien à ce que tu fais avec ta label. Utilise une GtkTextView plutot que d'empiler les widgets ...
ton empilage doit marcher très bien, il faut juste regaire un show/show_all ...
Marsh Posté le 26-04-2007 à 17:41:38
Il ne se remet jamais à jour. Comme dit précedemment, dans le main je déclare mon label et veut qu'il contienne en permanence le contenu de ma variable "received".
Mais le problème est qu'il garde en permanence le contenu initial de received, au moment de la création dans le main. Si received contient texte, mon label affichera toujours texte. S'il est vide, il ne contiendra jamais rien, malgré mes refresh et mon show_all.
Je voudrais que, si le "received" est modifié dans une fonction, le label soit mis à jour, mais je n'y parviens pas
Marsh Posté le 28-04-2007 à 15:04:02
tu ne dois faire aucun refresh ni show. Juste des set_text. Si ça ne marche pas, c'est que problème est ailleurs.
Marsh Posté le 25-04-2007 à 17:32:33
Salut tlm,
dans le cadre d'un soft de chat en C avec GTK, je voudrais envoyer une structure du fichier main vers un client, sans y parvenir; Je m'explique.
Dans la version non graphique, je dispose d'un fichier main, avec dans le main :
reply message;
strcpy(message.pseudo,"Bourreau" );
strcpy(message.msg,"texte" );
pthread_create(&thread2, NULL, client, (void *) &message);
Avec comme structure pour reply :
typedef struct {char pseudo[10] ; char msg[250] ;} reply ;
Dans sa version non graphique, tout marche impec. Le main cré un thread client et lui envoie le message, le client saura le lire et l'envoyer à qqn sur le réseau.
Voilà la gueule du client :
void * client(void * arg)
{
sleep(1);
char *host = "127.0.0.1";
enum clnt_stat stat;
reply* message;
message = (reply*) arg;
printf ("%s et %s\n",message->pseudo,message->msg);
stat = callrpc(host,PROGNUM,VERSNUMET,PROC_UN,(xdrproc_t) xdr_txt_in, (char *) message,(xdrproc_t) xdr_txt_out, (char *) message) ;
...
Seulement dans sa version GTK, rien à faire. Le changement :
le pthread_create n'est plus dans le main directement, mais dans une fonction du main, celle qui correspond au click sur un bouton.
Le reste est identique, le client est totalement inchangé. Seulement voilà, le client ne sait du coup plus recup le contenu de la structure et laisse les champs désespérement vides
Savez-vous ou se situe le problème ? Pq le fait d'appeler le client par une fonction du main et non plus dans le main entraine une perte des données de la structure ?
D'avance merci
Message édité par Bourreau le 25-04-2007 à 17:32:52