1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| #include <QtCore>
class ObjetTest: public QObject
{
Q_OBJECT
public:
ObjetTest( ){}
public slots:
void Emettre()
{
qDebug() << "Emission signal";
emit signal();
}
void Recevoir()
{
qDebug() << "Signal reçu";
}
signals:
void signal();
}; // class ObjetRecepteur
class ThreadTest: public QThread
{
Q_OBJECT
public:
ThreadTest(QSemaphore& _synchro, bool inf = false)
:QThread(), synchro(_synchro), infini(inf)
{}
void Emettre()
{
emit lancerSignal();
}
ObjetTest* Objet;
signals:
void lancerSignal();
protected:
QSemaphore& synchro;
bool infini;
void run()
{
Objet = new ObjetTest();
connect(this,SIGNAL(lancerSignal()), Objet, SLOT(Emettre()));
synchro.release(1);
if(infini)
{
forever
{
QThread::sleep(10000);
}
}
exec();
}
}; // class ThreadTest
#include "main.moc"
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
QSemaphore synchro;
ThreadTest T1(synchro); T1.start();
ThreadTest T2(synchro,true); T2.start();
ThreadTest T3(synchro); T3.start();
synchro.acquire(3);
/* Scénario 1 */
//QObject::connect(T1.Objet,SIGNAL(signal()), T2.Objet, SIGNAL(signal()));
/* Scénario 2 */
QObject::connect(T1.Objet,SIGNAL(signal()), T2.Objet, SIGNAL(signal()), Qt::DirectConnection);
QObject::connect(T1.Objet,SIGNAL(signal()), T2.Objet, SLOT(Emettre()));
QObject::connect(T2.Objet,SIGNAL(signal()), T3.Objet, SLOT(Recevoir()));
T1.Emettre();
return app.exec();
} |
Partager