Qt concurrent run()函数使用
来源:互联网 发布:信用卡查询账单软件 编辑:程序博客网 时间:2024/05/18 02:32
QFuture<T>run(constClass*object,T(Class::*fn)(Param1,Param2,Param3,Param4,Param5)const,constArg1 &arg1,constArg2 &arg2,constArg3 &arg3,constArg4 &arg4,constArg5 &arg5)
run()函数的原型如上,此函数是QtConcurrent命名空间里的函数.主要功能是令启动一个线程来执行一个函数.Concurrent的英文示意就是并发的意思.
下面简要的介绍run()函数的使用方法:
1.首先要有一个需要在另外开启的线程中执行的函数:
void thread_add(QObject*receiver,inta,intb)
{
QString message=QString("%1 + %2 = %3").arg(a).arg(b).arg(a+b);
QApplication::postEvent(receiver,new ProgressEvent(true, message));
}
函数在线程中运行完毕后会向receiver发送一个消息,来返回结果.
2.有了要在线程中运行的函数,再来看看怎么启动线程来运行这个函数
void MainWindow::on_pushButton_clicked()
{
for(int i=0;i<9;i++)
for(int j=0;j<9;j++)
QtConcurrent::run(thread_add,this,i,j);
}
点击一个按钮就会运行这段代码,然后启动8*8=64个线程,线程要运行的函数就是thread_add(之前定义的),消息接收对象就是MainWindow这个类的实例
3.线程得到了运行会发送消息给MainWindow,MainWindow重新实现boolMainWindow::event(QEvent*event)处理接收到的消息,并显示出来
bool MainWindow::event(QEvent*event)
{
if (event->type() ==
static_cast<QEvent::Type>(ProgressEvent::EventId)) {
ProgressEvent *progressEvent =
static_cast<ProgressEvent*>(event);
Q_ASSERT(progressEvent);
ui->teLog->append(progressEvent->message);
return true;
}
return QMainWindow::event(event);
}
再给出自定义的消息结构
struct ProgressEvent:publicQEvent
{
enum {EventId = QEvent::User};
explicit ProgressEvent(bool saved_, const QString &message_)
: QEvent(static_cast<Type>(EventId)),
saved(saved_), message(message_) {}
const bool saved;
const QString message;
};
- Qt concurrent run()函数使用
- Qt之Concurrent Run
- concurrent run()函数,立刻运行------------
- Qt Concurrent框架
- Qt之Concurrent框架
- Qt 多线程探秘2--Qt Concurrent
- concurrent.locks使用详解
- Qt: 多线程,继承QThread,重写run(理论+实例)
- Qt getOpenFileName函数使用详解
- Qt中的connect函数使用
- VB 中使用SendKeys开启Run 窗口和是用API函数去开启Run
- 使用Run-Time c 函数open的注意事项
- LoadRunner函数之Concurrent Group
- Qt 中QString类相关函数的使用(2)
- QT的信号和槽函数的使用(一)
- 线程池(java.util.concurrent.ThreadPoolExecutor)的使用(二)
- 线程池(java.util.concurrent.ThreadPoolExecutor)的使用(二)
- java.util.concurrent.CountDownLatch的使用(转)
- 欢迎使用CSDN-markdown编辑器
- 孤儿进程与僵尸进程[总结]
- Mongodb获取附近的人
- Linux常用命令大全
- Access内置SQL函数
- Qt concurrent run()函数使用
- CentOS 7 用户怎样安装 LNMP(Nginx+PHP+MySQL)
- 如何在App中实现IM功能之四创建稳健的消息发送模块——箭扣科技Arrownock
- 手机网页开发学习(不定时更新)
- windows配置eclipse+cakephp开发
- kafka topic增加replica报错解决
- [转]在Eclipse中使用JUnit4进行单元测试(初级篇)
- Linux初学笔记之<chmod命令>
- codeforces 545 E. Paths and Trees