精华内容
下载资源
问答
  • Qt 多进程

    2021-03-03 16:17:59
  • QT多进程

    千次阅读 2014-11-30 22:47:15
    QT多进程 sf2gis@163.com 2014年11月6日   1 目的:启动可执行文件。 2 原理:启动进程,并模拟命令行进行交互。 3 方法:QProcess、std::system() 3.1 QProcess 1) 启动程序:可以使用start(exe,...

    QT多进程

    sf2gis@163.com

    2014年11月6日

     

    1 目的:启动可执行文件。

    2 原理:启动进程,并模拟命令行进行交互。

    3 方法:QProcess、std::system()

    3.1 QProcess

    1)   启动程序:可以使用start(exe,argList)。注意:argList必须将所有单独的参数单独作为一项。

    2)   交互:状态:starting,running,notrunning。信号:started(),finished()。

    3)   读取输出:setReadChannel(),可以读取标准输出和标准错误输出。readAllStandardOutput()/readAllStandardError()。信号:readRead(),readReadStandOutput(),readReadStandardError()。

    注意:一定要在进程start()之前进行connect()。

    4)   异步控制: waitForStarted(),waitForFinished()。WaitForReadRead(),waitForBytesWriten()。

    5)   在Windows下启动命令行要使用cmd.exe。

    6)   快捷函数:execute():启动程序,并阻塞等待执行结束,并将输出输出到当前标准输出。

    startDetached():启动程序,不等待,直接返回。

    3.2 std::system(arg)

    C标准库函数。

    执行arg命令。阻塞进行,直至返回。

    如果arg=NULL,则返回0=无命令行处理程序,否则有命令行处理程序。

        intiRtn=std::system("cmd");

     

    4 示例: 

    //main.cp

    #include<QApplication>
    #include<QProcess>
    #include<qptest.h>
    #include<qobject.h>
    intmain(intargc,char*argv[])
    {
        QApplicationa(argc,argv);
        QPTestpt;
        QStringListlstArg;
        lstArg<<"-overwrite"<<"-s_srs"<<"EPSG:4326"<<"-t_srs"<<"EPSG:32650"<<"-r"<<"near"<<"-wm"<<"20"<<"-multi"<<"-of"<<"GTiff"<<"D:\\qgis-ppt\\project\\j50.tif"<<"D:/qgis-ppt/project/j50-xx.tif";
        QProcessp;
        p.connect(&p,SIGNAL(readyRead()),&pt,SLOT(testRead()));
        p.start("gdalwarp",lstArg);
        p.waitForFinished();
        intab=0;
        returna.exec();
    }
     
    //qptest.cpp
    #include"qptest.h"
    #include<QProcess>
    #include<QMessageBox>
    #include<QDebug>
     
    QPTest::QPTest(QObject*parent):
        QObject(parent)
    {
    }
     
    voidQPTest::testRead()
    {
        QProcess*pProces=(QProcess*)sender();
        QStringresult=pProces->readAll();
        qDebug()<<"percent:"<<result;
    //    QMessageBox::warning(NULL,"",result);
    }
     

    //qptest.h

    #ifndefQPTEST_H
    #defineQPTEST_H
     
    #include<QObject>
     
    classQPTest:publicQObject
    {
        Q_OBJECT
    public:
        explicitQPTest(QObject*parent=0);
     
    signals:
     
    publicslots:
        voidtestRead();
     
    };
     
    #endif//QPTEST_H

     

    展开全文
  • Qt多进程

    2021-06-02 16:37:36
    参考 QProcess中的start和startDetached两种启动方式的区别 QT5:多线程和多进程
    展开全文
  • QT 多进程通信

    2017-12-19 13:52:43
    qt 写的一个多进程 通信的例子. 利用qprocess 启动多个外部进程,利用QSharedMemory共享内存 实现消息交换。如果跨机子就需要写socket了
  • QT多进程编程

    千次阅读 2019-11-08 17:05:24
    使用QT中的QProcess类来启动一个外部·程序并与其进行通信。 要启动一个进程,可以使用start()函数,然后传递给该函数程序名称和运行这个程序所要使用的命令行参数。 执行完start函数,QProcess进入Starting状态,...

    单个进程

    使用QT中的QProcess类来启动一个外部·程序并与其进行通信。

    要启动一个进程,可以使用start()函数,然后传递给该函数程序名称和运行这个程序所要使用的命令行参数。

    执行完start函数,QProcess进入Starting状态,程序运行后QProcess进入Running状态并发射started()信号。进程退出后,QProcess重新进入NotRunning状态(初始状态)并发射finished()信号,这个信号提供了进程的退出代码和退出状态。

    可以使用exitCode()来获取上一个结束进程的退出代码,使用exitStatus()来获取退出状态。

    当任何时候发生错误,QProcess都会发生发射error()信号。可以使用error()来查看错误的类型和上次发生的错误。使用state()来查看当前进程的状态。

    单进程案例

    (1)在VS中新建QT项目,名称为QProcess_1,然后在ui界面拖入push button,文本修改为“启动一个进程”。

    (2)进入QProcess_1.h文件,先添加头文件#include <QProcess>,然后添加私有对象定义:QProcess myProcess。然后给(1)中的push button添加槽函数void on_pushButton_clicked()声明,并在cpp文件中给出详细定义(同时也要在ui界面中完成槽函数和push button的关联)

    void QProcess_1::on_pushButton_clicked()
    {
    	QString program = "cmd.exe";
    	QStringList argumentes;
    	argumentes << "/c dir&pause";
    	myProcess.start(program, argumentes);
    }

    其中program为程序名称,arguments为命令行参数。命令行参数使用"/c dir&pause",这里的"/c"指定命令dir在cmd中执行,"&pause"指定运行命令后暂停。

    (3)步骤二使用cmd执行了一个命令dir,可以用QProcess的一些信号进行关联。

    在QProcess_1.h文件中添加私有槽声明:

    	void showResult();
    	void showState(QProcess::ProcessState);
    	void showError();
    	void showFinished(int,QProcess::ExitStatus);

    在cpp文件中的构造函数中添加信号与槽的关联:

    QProcess_1::QProcess_1(QWidget *parent)
    	: QMainWindow(parent)
    {
    	ui.setupUi(this);
    	connect(&myProcess, SIGNAL(readyRead()), this, SLOT(showResult()));
    	connect(&myProcess, SIGNAL(stateChanged(QProcess::ProcessState)), this, SLOT(showState(QProcess::ProcessState)));
    	connect(&myProcess, SIGNAL(error(QProcess::ProcessError)), this, SLOT(showError()));
    	connect(&myProcess, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(showFinished(int, QProcess::ExitStatus)));
    	connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(on_pushButton_clicked()));
    }

    (4)完整程序代码:

    QProcess_1.h

    #pragma once
    #include <QtWidgets/QMainWindow>
    #include "ui_QProcess_1.h"
    #include <QProcess>
    
    class QProcess_1 : public QMainWindow
    {
    	Q_OBJECT
    
    public:
    	QProcess_1(QWidget *parent = Q_NULLPTR);
    
    private:
    	Ui::QProcess_1Class ui;
    	QProcess myProcess;
    
    private slots:
    	void on_pushButton_clicked();
    	void showResult();
    	void showState(QProcess::ProcessState);
    	void showError();
    	void showFinished(int,QProcess::ExitStatus);
    };

    QProcess_1.cpp

    #include "QProcess_1.h"
    #include <QDebug>
    
    QProcess_1::QProcess_1(QWidget *parent)
    	: QMainWindow(parent)
    {
    	ui.setupUi(this);
    	connect(&myProcess, SIGNAL(readyRead()), this, SLOT(showResult()));
    	connect(&myProcess, SIGNAL(stateChanged(QProcess::ProcessState)), this, SLOT(showState(QProcess::ProcessState)));
    	connect(&myProcess, SIGNAL(error(QProcess::ProcessError)), this, SLOT(showError()));
    	connect(&myProcess, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(showFinished(int, QProcess::ExitStatus)));
    	connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(on_pushButton_clicked()));
    }
    
    void QProcess_1::on_pushButton_clicked()
    {
    	QString program = "cmd.exe";
    	QStringList argumentes;
    	argumentes << "/c dir&pause";
    	myProcess.start(program, argumentes);
    }
    
    void QProcess_1::showResult()
    {
    	qDebug() << "showResult:" << endl << QString(myProcess.readAll());
    }
    
    void QProcess_1::showState(QProcess::ProcessState state)
    {
    	qDebug() << "showState";
    	if (state == QProcess::NotRunning)
    		qDebug() << "NotRunning";
    	else if(state== QProcess::Starting)
    		qDebug() << "Starting";
    	else
    		qDebug() << "Running";
    }
    
    void QProcess_1::showError()
    {
    	qDebug() << "showError:" << endl << myProcess.errorString();
    }
    
    void QProcess_1::showFinished(int exitCode, QProcess::ExitStatus exitStatus)
    {
    	qDebug() << "showFinished:" << endl << exitCode << exitStatus;
    }
    

    其中readAll()函数可以读取所有的运行结果。

    main.cpp

    #include "QProcess_1.h"
    #include <QtWidgets/QApplication>
    #include <QTextCodec>
    
    int main(int argc, char *argv[])
    {
    	QApplication a(argc, argv);
    	QProcess_1 w;
    	//QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
    	w.show();
    	return a.exec();
    }
    

    (5) 执行结果

    在windows下真实使用dir的结果:

     

     

     

    展开全文
  • Qt多进程共享内存

    2020-10-16 10:29:43
    Qt提供了一种安全的共享内存的实现QSharedMemory,以便在多线程和多进程编程中安全的使用。  先说下实现共享内存的步骤,然后用一具体的实例说明。  (一)向共享内存中提供数据的一方:  1,定义...
  • 1:请问QT的多线程是不是可以理解成Linux下的多进程? 2:如果不是,那么请问Qt下怎么进行多进程编程?进程之间的通信同步互斥什么的Qt有没有提供支持的类?还是得用Linux下的消息队列、管道、信号量什么的? 3:...
  • QT多进程界面程序

    2021-06-09 17:49:40
    QWidget *QWidget::createWindowContainer(QWindow *window, QWidget *parent = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags()) 示例: 子窗口1为MyWidget1,为应用程序 功能:显示界面,并将窗口1的wid...
  • qt多进程通信方式

    2021-06-11 21:18:15
    学习链接:https://blog.51cto.com/u_9291927/1879762
  • qt多进程调用mplayer播放网络电台

    热门讨论 2012-08-28 10:00:03
    本例是qt入门例程,包含多进程方式打开系统自带计算器功能,以及多进程方式调用mplayer程序打开网络电台功能。
  • 来源:微信公众号「编程学习基地」 文章目录进程间通信TCP/IPQShared Memory(共享内存)...QCOP(Qt COmmunications Protocol ) QProcess Session Management TCP/IP 其实就是通过网络模块实现的IPC。不过..
  • 多进程客户端框架是目前客户端开发的主流,chrome浏览器就是典型的多进程架构,关于多进程客户端的例子,大家可以查看我的一篇博客, qt中父进程窗口嵌入子进程产生的窗口 例如,下面的图中,标题栏是父进程窗口的,...
  • Qt 多进程通信之消息队列

    千次阅读 2017-08-07 10:52:33
    服务端: #include /* For O_* constants */ #include /* For mode constants */ #include #include #include #define MQNAME "/fifo1" mqd_t m_mq;//message queue object bool bExitThread
  • #include #define MQNAME "/fifo1"mqd_t m_mq;//message queue objectbool bExitThread = false;//exit thread conditionpthread_t g_thread;//thread objectvoid* Process(void* args){while(true){if(bExitThread....
  • Qt多进程写法

    2021-03-11 19:50:54
    qt多进程写法,这个比较简单,就没有什么文字说明了 1.widget.h #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include<QProcess> #include<QVector> QT_BEGIN_NAMESPACE namespace...
  • qt例程14.多进程爬虫.7z
  • Qt 防止进程多开

    2017-08-10 10:20:13
    从github上下载qt solution工程,https://github.com/qtproject/qt-solutions把其中的\qtsingleapplication添加到自己的工程,改写主程序:// Original int main(int argc, char **argv) { QApplication app...
  • Qt实现的生产者消费者模型(多进程),操作系统课程作业。 4消费者,4生产者,12缓冲区,可视化展示。
  • https://blog.csdn.net/qq_29542611/article/details/86567599 Qt:Windows编程—Qt实现进程管理 示例代码
  • Qt进程

    千次阅读 2018-08-03 10:19:44
    Qt 中,我们使用QProcess来表示一个进程。这个类可以允许我们的应用程序开启一个新的外部程序,并且与这个程序进行通讯。 //!!! Qt5 QString program = "C:/Windows/System32/cmd.exe"; QStringList...
  • QT进程多线程UI问题

    千次阅读 2019-05-30 14:21:50
    QT进程多线程UI问题 1.简介 由于在主线程以及线程中对GUI进行绘画刷新,导致了出现莫名其妙的问题。例如:1、在程序运行了一段时间后,程序UI不会刷新,运行的获取当前程序时间的程序一直在运行,但是不会将...
  • QT新建进程 QProcess

    2017-03-21 09:09:28
    Qt QProcess 作为几乎对C++进行语言级别改变的框架Qt,进行了与Cocoa类似的封装,对了,其实感觉Qt对C++从语言特性的改变 上来说类似于Cocoa对于Objective C的改变,不同的是Qt没能统治C++世界。 Test1: #...
  • QT进程与线程

    千次阅读 2015-09-16 15:32:05
    该文章原创于Qter开源社区... 导语 ...在前面的几节内容中讲解了Qt网络编程的一些基本内容,这一节来看一下在Qt进程和线程的基本应用。 环境:Windows Xp + Qt 4.8.5+Qt Creator2.8.0 目录
  • QT新建进程

    万次阅读 2012-03-09 16:31:47
    Qt QProcess 作为几乎对C++进行语言级别改变的框架Qt,进行了与Cocoa类似的封装,对了,其实感觉Qt对C++从语言特性的改变 上来说类似于Cocoa对于Objective C的改变,不同的是Qt没能统治C++世界。 Test1: #...
  • Qt:Windows编程—Qt实现进程管理

    千次阅读 2019-01-20 23:04:44
    利用相关的API使用Qt写界面实现了一个简单的进程管理。主要用到 进程的创建、进程的枚举、线程的枚举、DLL的枚举、进程提权等功能。相关API的介绍可以看 C/C++:Windows编程—创建进程、终止进程、枚举进程、枚举...
  • 进程是操作系统的基础之一。...在 Qt 中,我们使用QProcess来表示一个进程。这个类可以允许我们的应用程序开启一个新的外部程序,并且与这个程序进行通讯。下面我们用一个非常简单的例子开始我们本章有关进程的阐述。
  • 做客户端开发已经有好几个年头了,今天看到同事发了一篇关于富途牛牛的文章,核心思想就是想说,新版本的富途支持多进程架构了,效率大大提升啦,可以更好的里有多核CPU,提供软件运行效率。 听到这个消息,我不仅...
  • QT进程通信之共享内存

    热门讨论 2013-12-09 15:42:50
    Qt提供了一种安全的共享内存的实现QSharedMemory,以便在多线程和多进程编程中安全的使用。比如说QQ的聊天的客户端,这里有个个性头象,当点击QQ音乐播放器的时候,启动QQ音乐播放(启动一QQ音乐播放器的进程)这时...
  • qt进程和线程

    2017-05-12 16:05:42
    在前面的几节内容中讲解了Qt网络编程的一些基本内容,这一节来看一下在Qt进程和线程的基本应用。 环境:Windows Xp + Qt 4.8.5+Qt Creator2.8.0 目录 一、进程二、线程 正文 一、进程 在设计一个应用程序

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,702
精华内容 8,680
关键字:

qt多进程