Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qtconcurrentrunbase.h
Go to the documentation of this file.
1
// Copyright (C) 2016 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
// Qt-Security score:significant reason:default
4
5
#
ifndef
QTCONCURRENT_RUNBASE_H
6
#
define
QTCONCURRENT_RUNBASE_H
7
8
#
include
<
QtConcurrent
/
qtconcurrent_global
.
h
>
9
10
#
ifndef
QT_NO_CONCURRENT
11
12
#
include
<
QtCore
/
qfuture
.
h
>
13
#
include
<
QtCore
/
qrunnable
.
h
>
14
#
include
<
QtCore
/
qthreadpool
.
h
>
15
16
#
include
<
type_traits
>
17
#
include
<
utility
>
18
19
QT_BEGIN_NAMESPACE
20
21
22
#
ifndef
Q_QDOC
23
24
namespace
QtConcurrent
{
25
26
template
<
typename
T>
27
struct
SelectSpecialization
28
{
29
template
<
class
Normal,
class
Void>
30
struct
Type
{
typedef
Normal
type
; };
31
};
32
33
template
<>
34
struct
SelectSpecialization
<
void
>
35
{
36
template
<
class
Normal,
class
Void>
37
struct
Type
{
typedef
Void
type
; };
38
};
39
40
struct
TaskStartParameters
41
{
42
QThreadPool
*
threadPool
=
QThreadPool
::
globalInstance
();
43
int
priority
= 0;
44
};
45
46
template
<
typename
T>
47
class
RunFunctionTaskBase
:
public
QRunnable
48
{
49
public
:
50
QFuture
<
T
>
start
()
51
{
52
return
start(TaskStartParameters());
53
}
54
55
QFuture
<
T
>
start
(
const
TaskStartParameters
¶meters)
56
{
57
promise.setThreadPool(parameters.threadPool);
58
promise.setRunnable(
this
);
59
promise.reportStarted();
60
QFuture<T> theFuture = promise.future();
61
62
if
(parameters.threadPool) {
63
parameters.threadPool->start(
this
, parameters
.
priority
);
64
}
else
{
65
promise.reportCanceled();
66
promise.reportFinished();
67
delete
this
;
68
}
69
return
theFuture;
70
}
71
72
~
RunFunctionTaskBase
()
override
73
{
74
if
(!promise.isFinished()) {
75
promise.reportCanceled();
76
promise.reportFinished();
77
}
78
}
79
80
// For backward compatibility
81
QFuture
<
T
>
start
(QThreadPool *pool) {
return
start({pool, 0}); }
82
83
void
run
()
override
84
{
85
if
(promise.isCanceled()) {
86
promise.reportFinished();
87
return
;
88
}
89
#
ifndef
QT_NO_EXCEPTIONS
90
try
{
91
#
endif
92
runFunctor
(
)
;
93
#
ifndef
QT_NO_EXCEPTIONS
94
}
catch
(QException &e) {
95
promise.reportException(e);
96
}
catch
(...) {
97
promise.reportException(QUnhandledException(std::current_exception()));
98
}
99
#
endif
100
promise.reportFinished();
101
}
102
103
protected
:
104
virtual
void
runFunctor
() = 0;
105
106
QFutureInterface
<
T
>
promise
;
107
};
108
109
}
//namespace QtConcurrent
110
111
#
endif
//Q_QDOC
112
113
QT_END_NAMESPACE
114
115
#
endif
// QT_NO_CONCURRENT
116
117
#
endif
QtConcurrent::RunFunctionTaskBase
Definition
qtconcurrentrunbase.h:48
QtConcurrent::RunFunctionTaskBase::runFunctor
virtual void runFunctor()=0
QtConcurrent::RunFunctionTaskBase::~RunFunctionTaskBase
~RunFunctionTaskBase() override
Definition
qtconcurrentrunbase.h:72
QtConcurrent::RunFunctionTaskBase::run
void run() override
Implement this pure virtual function in your subclass.
Definition
qtconcurrentrunbase.h:83
QtConcurrent::RunFunctionTaskBase::promise
QFutureInterface< T > promise
Definition
qtconcurrentrunbase.h:106
QtConcurrent::RunFunctionTaskBase::start
QFuture< T > start(QThreadPool *pool)
Definition
qtconcurrentrunbase.h:81
QtConcurrent::RunFunctionTaskBase::start
QFuture< T > start(const TaskStartParameters ¶meters)
Definition
qtconcurrentrunbase.h:55
QtConcurrent::RunFunctionTaskBase::start
QFuture< T > start()
Definition
qtconcurrentrunbase.h:50
QtConcurrent
\inmodule QtConcurrent
Definition
qtconcurrentiteratekernel.cpp:29
QtConcurrent::SelectSpecialization::Type
Definition
qtconcurrentrunbase.h:30
QtConcurrent::SelectSpecialization::Type::type
Normal type
Definition
qtconcurrentrunbase.h:30
QtConcurrent::SelectSpecialization< void >::Type
Definition
qtconcurrentrunbase.h:37
QtConcurrent::SelectSpecialization< void >::Type::type
Void type
Definition
qtconcurrentrunbase.h:37
QtConcurrent::SelectSpecialization< void >
Definition
qtconcurrentrunbase.h:35
QtConcurrent::SelectSpecialization
Definition
qtconcurrentrunbase.h:28
QtConcurrent::TaskStartParameters
Definition
qtconcurrentrunbase.h:41
QtConcurrent::TaskStartParameters::threadPool
QThreadPool * threadPool
Definition
qtconcurrentrunbase.h:42
QtConcurrent::TaskStartParameters::priority
int priority
Definition
qtconcurrentrunbase.h:43
qtbase
src
concurrent
qtconcurrentrunbase.h
Generated on
for Qt by
1.18.0