1. QT中的线程操作

T19Process.pro

SOURCES
+=
\

main.cpp

CONFIG
+=
C++11

main.cpp

#include <QCoreApplication>
#include <QProcess>
#include <QDebug>
int main(int argc, char** argv)
{
    QCoreApplication app(argc, argv);
 
    QProcess process;
    // process.start("/home/xuegl/T0718/build-T18Database-Desktop-Debug/T18Database");
    process.start("ssh root@42.121.13.248");
    // process.start("ssh", QStringList() << "root@42.121.13.248" << "aa" << "bbb");
    // process.write("1\n", 2);
    process.waitForFinished();
 
    // process.waitForFinished();
    qDebug() << process.readAll();
    // qDebug() << process.exitCode();
 
    return app.exec();
}
  1. 多线程(可以通过moveToThread(QThread *)的方法指定给指定的线程)

新建项目T20Thread,项目代码如下:

T20Thread.pro

HEADERS
+=
\

Worker.h
\

MyThread.h

SOURCES
+=
\

Worker.cpp
\

MyThread.cpp
\

main.cpp

Worker.h

#ifndef
WORKER_H

#define
WORKER_H

#include
<QObject>

#include
<QThread> 
//要开启线程的时候需要使用头文件<QThread>

#include
<QDebug>

class
Worker
:
public
QObject

{

Q_OBJECT

public:

explicit
Worker(QObject
*parent
);

QThread
_thread;

bool
event(QEvent
*ev)

{

//通过QThread::currentThread()可以获得当前线程信息

qDebug()
<<
"event:"
<<
QThread::currentThread();

return
QObject::event(ev);

}

signals:

public
slots:

void
doWork()

{

qDebug()
<<
QThread::currentThread();

}

};

#endif
//
WORKER_H

Worker.cpp

#include
"Worker.h"

Worker::Worker(QObject
*parent)
:

QObject(parent)

{

//this->moveToThread(&_thread);

_thread.start();

connect(&_thread,
SIGNAL(finished()),
this,
SLOT(deleteLater()));

}

MyThread.h

#ifndef
MYTHREAD_H

#define
MYTHREAD_H

#include
<QThread>

#include
<QDebug>

class
MyThread
:
public
QThread

{

Q_OBJECT

public:

explicit
MyThread(QObject
*parent
);

void
foo()

{

qDebug()
<<
QThread::currentThread();

}

void
run()

{

foo();

qDebug()
<<
"thread
is
run";

}

signals:

public
slots:

};

#endif
//
MYTHREAD_H

MyThread.cpp

#include
"mythread.h"

MyThread::MyThread(QObject
*parent)
:

QThread(parent)

{

}

main.cpp

#include
<QCoreApplication>

#include
"mythread.h"

#include
"worker.h"

#include
<QTimer>

int
main(int
argc,
char*
argv[])

{

QCoreApplication
app(argc,
argv);

#if
0

MyThread
thread;

thread.start();

thread.foo();

#endif

qDebug()
<<
"main
thread
is"<<QThread::currentThread();

Worker*
worker
=
new
Worker();

QTimer*
timer
=
new
QTimer;

//worker->moveToThread(&thread);

QObject::connect(timer,
SIGNAL(timeout()),
worker,
SLOT(doWork()));

timer->setInterval(1000);

timer->start();

return
app.exec();

}

运行结果:

4.QT中进程操作,线程操作的更多相关文章

  1. QT的进程与线程(cmd /c的写法)

    该文章原创于Qter开源社区(www.qter.org),作者yafeilinux,转载请注明出处! 导语 在前面的几节内容中讲解了Qt网络编程的一些基本内容,这一节来看一下在Qt中进程和线程的基本应 ...

  2. Qt中与文件目录相关操作

    一.与文件目录操作有关操作. Qt中与文件目录相关的操作在QDir中,需加入#include <QDir>语句. QDir::drives()是列出电脑根目录下的所有目录,返回的是QFil ...

  3. qt中进程的使用

    qt中的进程使用需要用到头文件:include<QProcess> 首先来看看需要用到的主要的函数 (1)进程的定义: QProcess *mprocess; //定义一个进程参数 (2) ...

  4. Android中进程与线程及如何在子线程中操作UI线程

    1. Android进程 一个应用程序被启动时,系统默认创建执行一个叫做"main"的线程.这个线程也是你的应用与界面工具包(android.widget和android.view ...

  5. 4.关于QT中的QFile文件操作,QBuffer,Label上添加QPixmap,QByteArray和QString之间的区别,QTextStream和QDataStream的区别,QT内存映射(

     新建项目13IO 13IO.pro HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += gui widgets network CON ...

  6. 4.关于QT中的QFile文件操作,QBuffer,Label上加入QPixmap,QByteArray和QString之间的差别,QTextStream和QDataStream的差别,QT内存映射(

     新建项目13IO 13IO.pro HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += gui widgets network CON ...

  7. 关于Java中进程和线程的详解

    一.进程:是程序的一次动态执行,它对应着从代码加载,执行至执行完毕的一个完整的过程,是一个动态的实体,它有自己的生命 周期.它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而 ...

  8. Android中进程与线程

    常说的主线程(UI线程)是什么? 当一个Android程序刚启动的时候,我们的android系统就会启动一个带有一个单一线程的linux进程.默认情况下,所有的组件比如Activity都运行在同样的一 ...

  9. Python中进程和线程的总体区别

    Num01–>线程 线程是操作系统中能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位. 一个线程指的是进程中一个单一顺序的控制流. 一个进程中可以并发多条线程,每条线程并行 ...

随机推荐

  1. cmake 没有那个目录

    问题:bash: /usr/bin/cmake: 没有那个文件或目录 因为直接使用cmake系统回到默认的/usr/bin中去寻找,但是src中安装的cmake是在/usr/local/bin中,所以 ...

  2. 微信小程序适配iphonex

      // 在app.js中判断是否是哪种设备 globalData: { isIphoneX: false, userInfo: null }, onShow:function(){ let that ...

  3. 点(x1, y1)关于点(x0, y0)逆时针旋转a度后的坐标求解

    问题描述: 求点(x1, y1)关于点(x0, y0)逆时针旋转a度后的坐标 思路: 1.首先可以将问题简化,先算点(x1, y1)关于源点逆时针旋转a度后的坐标,求出之后加上x0,y0即可. 2.关 ...

  4. select动态绑定vue.js

    <select v-model="selected"> <option v-for="option in options" v-bind:va ...

  5. 重新设置Eclipse的workspace路径

    有3中方法可以更改workspace的路径设置: 1. 启动Eclipse/MyEclipse后, 打开"Window -> Preferences -> General -&g ...

  6. 数据结构之Treap

    1. 概述 同splay tree一样,treap也是一个平衡二叉树,不过Treap会记录一个额外的数据,即优先级.Treap在以关键码构成二叉搜索树的同时,还按优先级来满足堆的性质.因而,Treap ...

  7. js改变dom对象样式

    object.style.display = value; objcet对象必须是确定单个对象. 若以class名和标签名查找,需要指定对象集合中的第几个.

  8. 原生js去掉所有的html标签,最终得到HTML标签中的所有内容

    替换掉所有的 html标签,最终得到Html标签中的内容 <script> //替换掉所有的 html标签,最终得到Html标签中的内容 var req="<div sty ...

  9. Spring boot 整合 Mybatis + Thymeleaf开发web(二)

    上一章我把整个后台的搭建和逻辑给写出来了,也贴的相应的代码,这章节就来看看怎么使用Thymeleaf模板引擎吧,Spring Boot默认推荐Thymeleaf模板,之前是用jsp来作为视图层的渲染, ...

  10. Rabbitmq集群

    分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 Rabbitmq集群高 ...