Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
mahuifa
QMDemo
提交
e5776b83
Q
QMDemo
项目概览
mahuifa
/
QMDemo
通知
1
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Q
QMDemo
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
e5776b83
编写于
3月 08, 2023
作者:
mahuifa
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat:增加QtConcurrent::mapped使用示例
在mapped中异步计算多个0~n的数的和,并通过返回值传递出来。
上级
57a3bb17
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
206 addition
and
0 deletion
+206
-0
ConcurrentExamples/UseConcurrent/Mapped/Mapped.pro
ConcurrentExamples/UseConcurrent/Mapped/Mapped.pro
+42
-0
ConcurrentExamples/UseConcurrent/Mapped/main.cpp
ConcurrentExamples/UseConcurrent/Mapped/main.cpp
+11
-0
ConcurrentExamples/UseConcurrent/Mapped/widget.cpp
ConcurrentExamples/UseConcurrent/Mapped/widget.cpp
+79
-0
ConcurrentExamples/UseConcurrent/Mapped/widget.h
ConcurrentExamples/UseConcurrent/Mapped/widget.h
+28
-0
ConcurrentExamples/UseConcurrent/Mapped/widget.ui
ConcurrentExamples/UseConcurrent/Mapped/widget.ui
+45
-0
ConcurrentExamples/UseConcurrent/UseConcurrent.pro
ConcurrentExamples/UseConcurrent/UseConcurrent.pro
+1
-0
未找到文件。
ConcurrentExamples/UseConcurrent/Mapped/Mapped.pro
0 → 100644
浏览文件 @
e5776b83
#---------------------------------------------------------------------------------------
#
@
功能:
QtConcurrent
::
mapped使用示例
,与
map
()
类似,不同之处在于它返回了一个包含返回值的新容器。
#
@
编译器:
Desktop
Qt
5.12
.
5
MSVC2017
64
bit
(也支持其它编译器)
#
@
Qt
IDE
:
D
:/
Qt
/
Qt5
.
12.5
/
Tools
/
QtCreator
/
share
/
qtcreator
#
#
@
开发者
mhf
#
@
邮箱
1603291350
@
qq
.
com
#
@
时间
2023
-
03
-
08
19
:
56
:
37
#
@
备注
在
mapped中异步计算多个0
~
n的数的和
,并通过返回值传递出来。
#---------------------------------------------------------------------------------------
QT
+=
core
gui
concurrent
greaterThan
(
QT_MAJOR_VERSION
,
4
)
:
QT
+=
widgets
CONFIG
+=
c
++
11
DEFINES
+=
QT_DEPRECATED_WARNINGS
SOURCES
+=
\
main
.
cpp
\
widget
.
cpp
HEADERS
+=
widget
.
h
FORMS
+=
widget
.
ui
#
定义程序版本号
VERSION
=
1.0
.
0
DEFINES
+=
APP_VERSION
=
\\\
"$$VERSION\\\"
contains
(
QT_ARCH
,
i386
){
#
使用
32
位编译器
DESTDIR
=
$$
PWD
/../
bin
#
程序输出路径
}
else
{
DESTDIR
=
$$
PWD
/../
bin64
#
使用
64
位编译器
}
#
msvc
>=
2017
编译器使用
utf
-
8
编码
msvc
{
greaterThan
(
QMAKE_MSC_VER
,
1900
){
#
msvc编译器版本大于2015
QMAKE_CFLAGS
+=
/
utf
-
8
QMAKE_CXXFLAGS
+=
/
utf
-
8
}
else
{
message
(
msvc2015及以下版本在代码中使用
【
pragma
execution_character_set
(
"utf-8"
)
】指定编码
)
}
}
ConcurrentExamples/UseConcurrent/Mapped/main.cpp
0 → 100644
浏览文件 @
e5776b83
#include "widget.h"
#include <QApplication>
int
main
(
int
argc
,
char
*
argv
[])
{
QApplication
a
(
argc
,
argv
);
Widget
w
;
w
.
show
();
return
a
.
exec
();
}
ConcurrentExamples/UseConcurrent/Mapped/widget.cpp
0 → 100644
浏览文件 @
e5776b83
#include "widget.h"
#include "ui_widget.h"
#include <qthread.h>
#include <qtconcurrentmap.h>
#include <qthread.h>
Widget
::
Widget
(
QWidget
*
parent
)
:
QWidget
(
parent
)
,
ui
(
new
Ui
::
Widget
)
{
ui
->
setupUi
(
this
);
this
->
setWindowTitle
(
QString
(
"QtConcurrent::mapped使用示例--V%1"
).
arg
(
APP_VERSION
));
for
(
int
i
=
10
;
i
<
20
;
i
++
)
{
m_maxs
.
append
(
i
);
}
connect
(
&
m_futureWatcher
,
&
QFutureWatcher
<
quint64
>::
started
,
[](){
qDebug
()
<<
"开始监测"
;});
connect
(
&
m_futureWatcher
,
&
QFutureWatcher
<
quint64
>::
finished
,
[
&
]()
{
qDebug
()
<<
"执行完成"
;
});
connect
(
&
m_futureWatcher
,
&
QFutureWatcher
<
quint64
>::
progressRangeChanged
,
[](
int
minimum
,
int
maximum
)
// 进度范围改变时触发信号
{
qDebug
()
<<
QString
(
"进度范围[%1,%2]"
).
arg
(
minimum
).
arg
(
maximum
);
});
connect
(
&
m_futureWatcher
,
&
QFutureWatcher
<
quint64
>::
progressValueChanged
,
ui
->
progressBar
,
&
QProgressBar
::
setValue
);
// 进度改变时触发信号(会限制进度信号发射速率,可能无法接收到所有进度)
connect
(
&
m_futureWatcher
,
&
QFutureWatcher
<
quint64
>::
progressRangeChanged
,
ui
->
progressBar
,
&
QProgressBar
::
setRange
);
connect
(
&
m_futureWatcher
,
&
QFutureWatcher
<
quint64
>::
resultReadyAt
,
this
,
&
Widget
::
on_resultReadyAt
);
// 当有返回值时触发这个信号
}
Widget
::~
Widget
()
{
delete
ui
;
}
/**
* @brief 在线程中异步计算数据,并返回计算的结果
* @param max
* @return
*/
quint64
sum
(
int
max
)
{
qDebug
()
<<
QString
(
"开始计算从0~%1的和,线程:"
).
arg
(
max
)
<<
QThread
::
currentThreadId
();
quint64
sum
=
0
;
for
(
int
i
=
0
;
i
<
max
;
i
++
)
{
sum
+=
i
;
QThread
::
msleep
(
100
);
}
return
sum
;
}
/**
* @brief 获取异步计算的返回值
* @param resultIndex
*/
void
Widget
::
on_resultReadyAt
(
int
resultIndex
)
{
QString
str
=
QString
(
"计算0~%1的和:%2"
).
arg
(
m_maxs
.
at
(
resultIndex
)).
arg
(
m_futureWatcher
.
resultAt
(
resultIndex
));
ui
->
textEdit
->
append
(
str
);
}
/**
* @brief 开始在线程中异步计算数据
*/
void
Widget
::
on_pushButton_clicked
()
{
if
(
m_futureWatcher
.
isRunning
())
// 判断是否正在运行
{
m_futureWatcher
.
cancel
();
// 取消还没开始的异步任务,已经开始的不会发送进度和结果就绪信号
m_futureWatcher
.
waitForFinished
();
// 等待已经开始的异步任务完成
return
;
}
m_futureWatcher
.
setFuture
(
QtConcurrent
::
mapped
(
m_maxs
,
sum
));
}
ConcurrentExamples/UseConcurrent/Mapped/widget.h
0 → 100644
浏览文件 @
e5776b83
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <qfuturewatcher.h>
QT_BEGIN_NAMESPACE
namespace
Ui
{
class
Widget
;
}
QT_END_NAMESPACE
class
Widget
:
public
QWidget
{
Q_OBJECT
public:
Widget
(
QWidget
*
parent
=
nullptr
);
~
Widget
();
private
slots
:
void
on_resultReadyAt
(
int
resultIndex
);
void
on_pushButton_clicked
();
private:
Ui
::
Widget
*
ui
;
QFutureWatcher
<
quint64
>
m_futureWatcher
;
QList
<
int
>
m_maxs
;
};
#endif // WIDGET_H
ConcurrentExamples/UseConcurrent/Mapped/widget.ui
0 → 100644
浏览文件 @
e5776b83
<?xml version="1.0" encoding="UTF-8"?>
<ui
version=
"4.0"
>
<class>
Widget
</class>
<widget
class=
"QWidget"
name=
"Widget"
>
<property
name=
"geometry"
>
<rect>
<x>
0
</x>
<y>
0
</y>
<width>
487
</width>
<height>
362
</height>
</rect>
</property>
<property
name=
"windowTitle"
>
<string>
Widget
</string>
</property>
<layout
class=
"QGridLayout"
name=
"gridLayout"
>
<item
row=
"0"
column=
"0"
>
<widget
class=
"QTextEdit"
name=
"textEdit"
>
<property
name=
"font"
>
<font>
<family>
黑体
</family>
<pointsize>
14
</pointsize>
</font>
</property>
</widget>
</item>
<item
row=
"2"
column=
"0"
>
<widget
class=
"QPushButton"
name=
"pushButton"
>
<property
name=
"text"
>
<string>
PushButton
</string>
</property>
</widget>
</item>
<item
row=
"1"
column=
"0"
>
<widget
class=
"QProgressBar"
name=
"progressBar"
>
<property
name=
"value"
>
<number>
24
</number>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
ConcurrentExamples/UseConcurrent/UseConcurrent.pro
浏览文件 @
e5776b83
...
...
@@ -14,3 +14,4 @@ TEMPLATE = subdirs
SUBDIRS
+=
RunFunction
#
QtConcurrent
::
run使用示例
,在另一个线程中运行一个函数。
SUBDIRS
+=
Map
#
QtConcurrent
::
map使用示例
,可以在多线程环境下高效地处理大量数据,并且可以返回一个
QFuture
对象,可以使用它来跟踪数据处理的进度。
SUBDIRS
+=
Mapped
#
QtConcurrent
::
mapped使用示例
,与
map
()
类似,不同之处在于它返回了一个包含返回值的新容器。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录