diff options
author | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2017-09-15 17:53:48 +0100 |
---|---|---|
committer | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2017-09-24 15:05:25 +0000 |
commit | 0d0ad598c54652dbe04d5716025facd83adc979b (patch) | |
tree | b52933ec69fbdcb0bd8a2e684adaf06796ee5815 /src/corelib/thread/qthread.cpp | |
parent | e5033a5c9b769815112e922d0b224af860afd219 (diff) |
QThread::create: move implementation out of line
Now that we accept STL datatypes in our ABI, expose a factory
function that takes a std::future<void>, and hide the QThread
subclass in our implementation. This also solves the problem
of a non-exported polymorphic class that would generate duplicate
vtables / typeinfo in all TUs.
Change-Id: I70a5c301e7c589de1a4a189db39b86b956d1ba0d
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/thread/qthread.cpp')
-rw-r--r-- | src/corelib/thread/qthread.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/corelib/thread/qthread.cpp b/src/corelib/thread/qthread.cpp index 1ec626a53b..e3ba1e4449 100644 --- a/src/corelib/thread/qthread.cpp +++ b/src/corelib/thread/qthread.cpp @@ -925,6 +925,30 @@ bool QThread::isInterruptionRequested() const \sa start() */ +#ifdef QTHREAD_HAS_CREATE +class QThreadCreateThread : public QThread +{ +public: + explicit QThreadCreateThread(std::future<void> &&future) + : m_future(std::move(future)) + { + } + +private: + void run() override + { + m_future.get(); + } + + std::future<void> m_future; +}; + +QThread *QThread::createThreadImpl(std::future<void> &&future) +{ + return new QThreadCreateThread(std::move(future)); +} +#endif // QTHREAD_HAS_CREATE + /*! \class QDaemonThread \since 5.5 |