[QT] thread

thread [QT] - C++ - Programmation

Marsh Posté le 20-05-2003 à 21:37:09    

salut,
je souhaite utiliser les threads dans qt (sous linux)mais je n'y arrive pas... J'ai pris l'exemple qui est donné dans la doc mais je n'arrive pas à le compiler.

Code :
  1. #include <qthread.h>
  2. class MyThread : public QThread {
  3.     public:
  4.         virtual void run();
  5.     };
  6.     void MyThread::run()
  7.     {
  8.         for( int count = 0; count < 20; count++ ) {
  9.             sleep( 1 );
  10.             printf( "Ping!" );
  11.         }
  12.     }
  13.     int main()
  14.     {
  15.         MyThread a;
  16.         MyThread b;
  17.         a.start();
  18.         b.start();
  19.         a.wait();
  20.         b.wait();
  21.     }


Pour compiler je fais :
g++ -Wall -I /usr/local/qt/include -L /usr/local/qt/lib -lqt
Mais rien n'y fait, il comprend que class MyThread est un type...
SVP, aidez moi !
merci d'avance

Reply

Marsh Posté le 20-05-2003 à 21:37:09   

Reply

Marsh Posté le 20-05-2003 à 22:21:12    

il faut que qt ait été compilé avec le support des threads. sinon ca marche pas.

Reply

Marsh Posté le 20-05-2003 à 22:28:57    

je l'ai fait !
au fait, dans la comilation, j'utilise aussi -lpthread comme option.

Reply

Marsh Posté le 20-05-2003 à 23:28:17    

Si tu mets l'erreur renvoyée par le compilo, les gens qui veulent pas se faire chier à tester ton exemple pourront éventuellement t'aider.


Message édité par verdoux le 20-05-2003 à 23:28:37
Reply

Marsh Posté le 20-05-2003 à 23:31:54    

Il faut linker avec -lqt-mt (mt pour multithread).  
 
Si tu utilise qmake, no'oublie pas de rajouter :  
 
CONFIG += thread
 
Dans ton fichier .pro


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 21-05-2003 à 19:40:47    

Citation :

Si tu utilise qmake, no'oublie pas de rajouter :  
 
CONFIG += thread
 
Dans ton fichier .pro

Non, je n'utilise pas qmake. Je débute dans qt donc j'ai voulu tout tapper moi même plutôt que de générer le code bêtement, histoire de comprendre comment ça fonctionne
 
 

Citation :

Si tu mets l'erreur renvoyée par le compilo, les gens qui veulent pas se faire chier à tester ton exemple pourront éventuellement t'aider.

Voilà le message que j'obtient après compilation :
 

Citation :

[kayl@Athlon1400 pc1]$ g++ -c -o MyThread.o MyThread.cpp -I /usr/local/qt/include -lqt-mt -pthread
MyThread.cpp:5: erreur d'analyse syntaxique avantle jeton « { »
MyThread.cpp:14: utilisation invalide d'un type indéfini «class MyThread»
MyThread.cpp:5: déclaration par l'avant (forward) de «class MyThread»
MyThread.cpp: Dans function « int main() »:
MyThread.cpp:23: aggrégat «MyThread a» a un type incomplet et ne peut être
   défini
MyThread.cpp:24: aggrégat «MyThread b» a un type incomplet et ne peut être
   défini

 
Merci de votre aide
PS: je met beaucoup de temps à répondre car au boulot, je n'ai pas accès au net... pas pratique du tout !

Reply

Marsh Posté le 21-05-2003 à 20:28:47    

show me the code :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 21-05-2003 à 20:53:11    

Citation :

show me the code :o

 
Je l'ai mis plus haut !
 
Le voilà à nouveau :
 

Code :
  1. #include <qthread.h>
  2. #include <unistd.h>
  3. #include <stdio.h>
  4. class MyThread : public QThread {
  5.     public:
  6.         virtual void run();
  7.     };
  8.     void MyThread::run()
  9.     {
  10.         for( int count = 0; count < 20; count++ ) {
  11.             sleep( 1 );
  12.             printf( "Ping!" );
  13.         }
  14.     }
  15.     int main()
  16.     {
  17.         MyThread a;
  18.         MyThread b;
  19.         a.start();
  20.         b.start();
  21.         a.wait();
  22.         b.wait();
  23.     }

Reply

Marsh Posté le 22-05-2003 à 19:06:35    

aucune idée d'où cela peut venir ?

Reply

Marsh Posté le 22-05-2003 à 20:50:25    

kayl667 a écrit :

aucune idée d'où cela peut venir ?


 
De ta ligne de commande pour compiler. Utilise plutot :  
 

g++ -o MyThread MyThread.cpp -DQT_THREAD_SUPPORT -I$QTDIR/include -lqt-mt

 
 
(et je rapelle que qmake génère ce genre de conneries automatiquement, sauf cas tordu, il y a plus à ce faire chier de nos jour).
 
Dans l'exemple, si c'est qDebug qui est utilisé et pas printf, il y a une raison. Après l'essai, remet qDebug en n'oubliant pas le #include<qapplication.h>.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 22-05-2003 à 20:50:25   

Reply

Marsh Posté le 22-05-2003 à 21:05:08    

merci à toi kadreg, ça fonctionns !!

Reply

Sujets relatifs:

Leave a Replay

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