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 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
/****************************************************************************
** $Id: qt/examples/guithreads/main.cpp 2.3.1 edited 2001-01-26 $
**
** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
**
** This file is part of an example program for Qt. This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/
#include <qapplication.h>
#include <qhbox.h>
#include <qthread.h>
#include <qlabel.h>
class WaitThread: public QThread
{
public:
WaitThread(QThread *thr1, QThread *thr2, QLabel *lbl);
void run();
private:
QThread *thread1, *thread2;
QLabel *label;
};
WaitThread::WaitThread(QThread *thr1, QThread *thr2, QLabel *lbl)
: thread1(thr1), thread2(thr2), label(lbl)
{
}
void WaitThread::run()
{
thread1->wait();
thread2->wait();
qApp->lock();
label->setText("<h1>Done!</h1>");
qApp->unlock();
}
class GUIThread : public QThread
{
public:
GUIThread( QLabel*, const QString& );
protected:
void run();
private:
QLabel* label;
QString text;
};
static QMutex* mutex;
GUIThread::GUIThread( QLabel* l, const QString& t )
: label( l ), text( t )
{
}
void GUIThread::run()
{
for ( int i = 0; i < 5; i++ ) {
mutex->lock();
qApp->lock();
label->setText(text);
qApp->unlock();
sleep( 1 );
mutex->unlock();
}
}
// The program starts here
int main( int argc, char** argv )
{
QApplication app( argc, argv );
mutex = new QMutex;
QHBox box( 0, 0, TRUE );
QLabel label( &box );
label.setAlignment(Qt::AlignCenter);
label.setMinimumSize(400, 300);
GUIThread first( &label, "<b>Ping</b>" );
GUIThread second( &label, "<i>Pong</i>" );
WaitThread third(&first, &second, &label);
app.setMainWidget( &box );
box.show();
first.start();
second.start();
third.start();
int r = app.exec();
delete mutex;
return r;
}
|