QT中QtConcurrent创建并行线程的方法
2016-07-18 13:54
585 查看
头文件中:
#include <QtConcurrentRun>
#include <QProcess>
#include <QFuture>
protected:
bool event(QEvent *event);
/*
自定义的ProgressEvent结构体
*/
struct ProgressEvent : public QEvent
{
enum {EventId = QEvent::User};
explicit ProgressEvent(bool saved_, const DWORD &message_)
: QEvent(static_cast<QEvent::Type>(EventId)),
saved(saved_), message(message_) {}
const bool saved;
const DWORD message;
};在类的成员函数中写:
QFuture<void> future = QtConcurrent::run(runVipNet,this,path);
//阻塞主线程直到计算完成
future.waitForFinished();runVipNet是类外函数:
//
void runVipNet(QMainWindow *receiver,QString _path)
{
QApplication::postEvent(receiver,new ProgressEvent(true, (DWORD)QThread::currentThreadId()));
MainWindow* s = (MainWindow*) receiver;
//获取线程ID
s->addThreadID((DWORD)QThread::currentThreadId());
//运行外部exe
QProcess::startDetached(_path,QStringList());
}
//
bool MainWindow::event(4000QEvent *event)
{
if (event->type() == static_cast<QEvent::Type>(ProgressEvent::EventId))
{
ProgressEvent *progressEvent = static_cast<ProgressEvent*>(event);
Q_ASSERT(progressEvent);
ui->textBrowser->append(QString::number(progressEvent->message));
return true;
}
return QMainWindow::event(event);
}
/*
自定义的ProgressEvent结构体
*/
struct ProgressEvent : public QEvent
{
enum {EventId = QEvent::User};
explicit ProgressEvent(bool saved_, const DWORD &message_)
: QEvent(static_cast<QEvent::Type>(EventId)),
saved(saved_), message(message_) {}
const bool saved;
const DWORD message;
};
相关文章推荐
- QT学习 第一章:基本对话框
- 使用Shiboken为C++和Qt库创建Python绑定
- Qt 5.6更新至RC版,最终版本近在咫尺
- Qt定时器和随机数详解
- Qt实现图片移动实例(图文教程)
- Qt for Android开发实例教程
- QModelIndex/Role/Model介紹<二>
- Qt Model/View/Delegate浅谈 - QAbstractListModel
- Qt Model/View/Delegate浅谈 - roleNames()
- QT历程(一):与CryptoJs对应的AES加密
- 基于PyQt5的快速开发框架QFramer
- OSX下安装PyQt
- ok6410开发板移植DirectFB手记
- 【笔记】给Qt内嵌一个Chrome吧
- 【算法】最短路径之A*搜索
- qt入门必备
- 在 Qt4 中使用 C++11
- Hello Word ~ v0.2.2 背单词软件发布 -- By WHYPRO
- ubuntu下opencv和qt的安装配置
- linux下opengl的安装(with qt)