diff options
Diffstat (limited to 'src/corelib/thread/qthread.cpp')
-rw-r--r-- | src/corelib/thread/qthread.cpp | 71 |
1 files changed, 70 insertions, 1 deletions
diff --git a/src/corelib/thread/qthread.cpp b/src/corelib/thread/qthread.cpp index 996a1df9a0..e92be64dfa 100644 --- a/src/corelib/thread/qthread.cpp +++ b/src/corelib/thread/qthread.cpp @@ -291,7 +291,7 @@ QThreadPrivate::~QThreadPrivate() \fn int QThread::idealThreadCount() Returns the ideal number of threads that can be run on the system. This is done querying - the number of processor cores, both real and logical, in the system. This function returns -1 + the number of processor cores, both real and logical, in the system. This function returns 1 if the number of processor cores could not be detected. */ @@ -880,6 +880,75 @@ bool QThread::isInterruptionRequested() const return d->interruptionRequested; } +/* + \fn template <typename Function, typename Args...> static QThread *QThread::create(Function &&f, Args &&... args) + \since 5.10 + + Creates a new QThread object that will execute the function \a f with the + arguments \a args. + + The new thread is not started -- it must be started by an explicit call + to start(). This allows you to connect to its signals, move QObjects + to the thread, choose the new thread's priority and so on. The function + \a f will be called in the new thread. + + Returns the newly created QThread instance. + + \note the caller acquires ownership of the returned QThread instance. + + \note this function is only available when using C++17. + + \warning do not call start() on the returned QThread instance more than once; + doing so will result in undefined behavior. + + \sa start() +*/ + +/* + \fn template <typename Function> static QThread *QThread::create(Function &&f) + \since 5.10 + + Creates a new QThread object that will execute the function \a f. + + The new thread is not started -- it must be started by an explicit call + to start(). This allows you to connect to its signals, move QObjects + to the thread, choose the new thread's priority and so on. The function + \a f will be called in the new thread. + + Returns the newly created QThread instance. + + \note the caller acquires ownership of the returned QThread instance. + + \warning do not call start() on the returned QThread instance more than once; + doing so will result in undefined behavior. + + \sa start() +*/ + +#if QT_CONFIG(cxx11_future) +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 // QT_CONFIG(cxx11_future) + /*! \class QDaemonThread \since 5.5 |