QtBase  v6.3.1
src_corelib_thread_qthread.cpp
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 Olivier Goffart <ogoffart@woboq.com>
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the documentation of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:BSD$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** BSD License Usage
18 ** Alternatively, you may use this file under the terms of the BSD license
19 ** as follows:
20 **
21 ** "Redistribution and use in source and binary forms, with or without
22 ** modification, are permitted provided that the following conditions are
23 ** met:
24 ** * Redistributions of source code must retain the above copyright
25 ** notice, this list of conditions and the following disclaimer.
26 ** * Redistributions in binary form must reproduce the above copyright
27 ** notice, this list of conditions and the following disclaimer in
28 ** the documentation and/or other materials provided with the
29 ** distribution.
30 ** * Neither the name of The Qt Company Ltd nor the names of its
31 ** contributors may be used to endorse or promote products derived
32 ** from this software without specific prior written permission.
33 **
34 **
35 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
36 ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
37 ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
38 ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
39 ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40 ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41 ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
42 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
43 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
44 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
45 ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
46 **
47 ** $QT_END_LICENSE$
48 **
49 ****************************************************************************/
50 
51 #include <QtCore/QThread>
52 class MyObject;
53 
55 class WorkerThread : public QThread
56 {
57  Q_OBJECT
58  void run() override {
60  /* ... here is the expensive or blocking operation ... */
62  }
63 signals:
64  void resultReady(const QString &s);
65 };
66 
67 void MyObject::startWorkInAThread()
68 {
69  WorkerThread *workerThread = new WorkerThread(this);
70  connect(workerThread, &WorkerThread::resultReady, this, &MyObject::handleResults);
71  connect(workerThread, &WorkerThread::finished, workerThread, &QObject::deleteLater);
72  workerThread->start();
73 }
75 
76 
78 class Worker : public QObject
79 {
80  Q_OBJECT
81 
82 public slots:
83  void doWork(const QString &parameter) {
85  /* ... here is the expensive or blocking operation ... */
87  }
88 
89 signals:
90  void resultReady(const QString &result);
91 };
92 
93 class Controller : public QObject
94 {
95  Q_OBJECT
96  QThread workerThread;
97 public:
99  Worker *worker = new Worker;
100  worker->moveToThread(&workerThread);
101  connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater);
102  connect(this, &Controller::operate, worker, &Worker::doWork);
104  workerThread.start();
105  }
107  workerThread.quit();
108  workerThread.wait();
109  }
110 public slots:
111  void handleResults(const QString &);
112 signals:
113  void operate(const QString &);
114 };
void handleResults(const QString &)
void operate(const QString &)
[0]
Definition: myobject.h:58
The QObject class is the base class of all Qt objects.
Definition: qobject.h:125
void moveToThread(QThread *thread)
Definition: qobject.cpp:1572
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
Definition: qobject.cpp:2772
void deleteLater()
Definition: qobject.cpp:2319
The QString class provides a Unicode character string.
Definition: qstring.h:388
void start(Priority=InheritPriority)
Definition: qthread.cpp:836
void finished(QPrivateSignal)
void resultReady(const QString &result)
void doWork(const QString &parameter)
void resultReady(const QString &s)
GLuint64EXT * result
[6]
Definition: qopenglext.h:10932
GLdouble s
[6]
Definition: qopenglext.h:235
#define Q_OBJECT
Definition: qtmetamacros.h:158
#define slots
Definition: qtmetamacros.h:76
#define signals
Definition: qtmetamacros.h:77
#define emit
Definition: qtmetamacros.h:85