[QT]Probleme de thread...

Probleme de thread... [QT] - C++ - Programmation

Marsh Posté le 13-05-2005 à 10:22:39    

Premier programme sous qt (et premier en c++...)
mon probleme est assez simpl : une application avec une fenetre et qq champs... une fonction d'enregistrement des parametres rentres dans les champs (grace a un bouton) et un thread cree par le main, pour en meme temps faire quelques trucs invisible a l'utilisateur (lancement d'un script etc.. mais c'est pas encore implementé
 
lorsque je click sur enregistrer, j'aimerai que mon thread se relance... pb, mes fonctions de ma fenetre ne connaissent pas ce thread, nis sa classe parce qu'elle a ete cree dans la main
lorsque je cree le thread par la fonction d'initialisation (qui rempli mes champs grace au precedent enregistrement), j'ai un erreur de compil :  
 

Citation :

moc/moc_interface.cpp:84: undefined reference to `interface::run()'
collect2: ld a retourné 1 code d'état d'exécution
make: *** [wifi] Erreur 1


 
apparemment ma fonction d'initialisation ne peut pas executer une fonction qui n'appartient pas a la classe interface?
 
voici juste la declaration de mon thread :  
 

Citation :

class GestionConnection : public QThread {
 
    public:
 
        virtual void run();
 
    };


 
et le code de ma fonction d'init (enfin une partie)
 

Citation :

void interface::init()
    {
       QFile file( "conf.dat" );
       QString chemin;
       Q_UINT32 temp;
       int tick;
       GestionConnection thread;
       
       ****plein de chose ininteressantes....  
 
       thread.start(QThread::IdlePriority);
    }


 
je vous remercie de m'aider, je pense que mon probleme est que je ne connais pas du tout assez le c++...


---------------
Un blog qu'il est bien
Reply

Marsh Posté le 13-05-2005 à 10:22:39   

Reply

Marsh Posté le 13-05-2005 à 10:28:36    

un run est toulours en protéger.
essaye sa!

Code :
  1. protected :
  2. void run();

Reply

Marsh Posté le 13-05-2005 à 12:53:04    

j'ai le regret de vous annoncer que... cela ne fonctionne pas, j'ai exactement la meme erreur (je suis bien dans le meme fichier que ma fonction init)
 
un collegue m'a dit que je devrais mettre mon thread dans un autre fichier, en definissant dans les proprietes du fichier ou j'ai mes fonctions init (en fait la source de ma form) Include (in declaration ou in implementation, il savait pas) le nouveau fichier...
je vais essayer ca, mais je ne vois pas en quoi cela changerai le probleme actuel, qui est que ma fonction init (qui fait partie de la classe interface) ne peut acceder a la fonction run de mon thread... pb de classe donc?
question : est-il possible de definir mon thread comme faisant partie de la classe interface? comment fait on?
ou faut il plutot dire qu'elle "herite" de la classe interface?? coment le fait on ??  
ou est-ce que j'ai tout faux???
 
dsl, plein plein de questions...


---------------
Un blog qu'il est bien
Reply

Marsh Posté le 13-05-2005 à 14:05:51    

une chose que je ne comprends pas : comment ce fait-il que la ligne : GestionConnection thread; fonctionne (il a donc trouve la classe GestionConnection) mais que l'appel de la fonction ne tourne pas????????
 
[edit]l'implementation de mon thread se fait dans le fichier interface.ui.h...
cela viendrait-il de la???
 
heeeeeeeeeeeeeeeeeeeeeeeelp please!


Message édité par guepe le 13-05-2005 à 14:08:28

---------------
Un blog qu'il est bien
Reply

Marsh Posté le 13-05-2005 à 20:54:59    

Te lancer dans le multithread sous Qt comme premiere approche de la prog C++, je ne pense pas que ce soit un choix judicieux.
Un peu plus de modestie et d'humilite pour commencer tu devras avoir.
 
Deja, ca depend de comment tu as compile ton Qt et ca depend de la version de Qt que tu utilises. Qt peut etre compile avec sous sans le support du multithreading ... donc si tu as compile sans, tu peux toujours te battre avec ton thread. Ensuite, selon les versions les thread ne fonctionnent pas tout a fait pareil (enfin, Qt4 change pas mal de choses, ... en mieux).
 
J'ajouterais que Qt propose un systeme de signaux/slots qui utilise deja plusieurs thread pour toi en fait donc lancer des threads sous Qt impose de suivre certaines regles que tu ne recontrera pas avec d'autres librairies, alors si le but de ton prog est de te familiariser avec les thread, ce n'est pas forcement le bon choix car Qt te simplifiera un peu trop la vie pour en retirer quelque chose et en meme temps il y a quelques limitations ...
 
Ensuite, si tu souhaites poursuivre, le plus simple est que tu jetes un coup d'oeil a la doc de QThread et au dossier exemple de Qt qui te fournira tout le matos necessaire pour faire tourner ton programme.
Pour etre encore plus propre, il y a un bouquin dispo en pdf sur le net : "programming with Qt3". Une petite lecture sur le chapitre des thread de cet EXCELLENT livre (une reference sur Qt3) et tu sera un dieu du multithreading sous Qt ... (mince, j'avais dit qu'il fallait rester humble ...)

Reply

Marsh Posté le 14-05-2005 à 11:40:47    

je te remercie pour cette reponse ;-)
 
bon, et bien pour commencer.. ca marche presque au poil (reste un chtit bug mais rien de grave, ca fonctionne bien)
ensuite, pour l'explication : j'ai tout simplement mis mon thread dans un autre fichier + declaration dans un .h et voilou.. c'etait assez logique en fait
 
c'est loin d'etre finis, je vais de ce pas lire en tt cas an partie ce bouquin, merci pour l'info..
petite quesion : est-il possible d'executer un script bash depuis un prog en c++ (heu ous qt evidemment)? j'ai pas encore regarder, mais je devrais parce que sans ca l'interet de mon prog est... limité  :D  
 
bon a+ et merci pour tout !


---------------
Un blog qu'il est bien
Reply

Marsh Posté le 14-05-2005 à 16:11:06    

QProcess permet de lancer des processus externes. cela repond t il a ta question ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed