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. hdu4549(费马小定理 + 快速幂)

    M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给出a, b, n,你能求出F[n ...

  2. 习题9-5 UVA 242

    Stamps and Enovelope Size 题意: 给你最多贴S张邮票.有N个邮票集合,每个集合有不同的面值.问哪个集合的最大连续邮资最大,输出最大连续邮资和集合元素. 如果不止一个集合结果相 ...

  3. Serpent.AI – 游戏代理框架(Python)

    Serpent.AI - 游戏代理框架(Python) Serpent.AI是一个简单而强大的新颖框架,可帮助开发人员创建游戏代理.将您拥有的任何视频游戏变成一个成熟的实验的沙箱环境,所有这些都是熟悉 ...

  4. PHP+JQuery+Ajax初始化网站基本信息(附源码)--PHP

    一.思路 为了保存用户会员信息的时间长一些,不局限于session的关闭.我们需要将用户信息保存在数据库中,前台每次登录都需要进行校验,来查看用看用户会员信息是否过期,如果没有过期,取出用户会员信息存 ...

  5. vue-cli搭建项目的目录结构及说明

    vue-cli基于webpack搭建项目的目录结构 build文件夹 ├── build              // 项目构建的(webpack)相关代码    │ ├── build.js   ...

  6. ACM Meteor Shower

    贝茜听到一场非同寻常的流星雨( meteor shower)即将来临;有报道称这些流星将撞击地球并摧毁它们所击中的任何东西.为了安全起见(Anxious for her safety), ,她发誓(v ...

  7. Bootstrap3 表单-水平排列的表单

    通过为表单添加 .form-horizontal 类,并联合使用 Bootstrap 预置的栅格类,可以将 label 标签和控件组水平并排布局.这样做将改变 .form-group 的行为,使其表现 ...

  8. Android Support库——support annotations

    Android Support库是官方出的支持扩展库,包含了丰富的组件.工具类等,通过在Android SDK Manager中勾选以下两项来获取到. 其中,Android Support Libra ...

  9. 简单将sublime text 配置为lua或c#一键编译运行环境

    lua { "cmd": "luajit $file", "selector":"source.lua" } C { & ...

  10. 六星经典CSAPP-笔记(11)网络编程

    六星经典CSAPP-笔记(11)网络编程 参照<深入理解计算机系统>简单学习了下Unix/Linux的网络编程基础知识,进一步深入学习Linux网络编程和TCP/IP协议还得参考Steve ...