4.QT中进程操作,线程操作

简介:  QT中的线程操作 T19Process.pro SOURCES += \     main.cpp   CONFIG += C++11 main.cpp #include <QCoreApplication>

  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 = 0);

 

    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 = 0);

 

    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();

}

运行结果:

 

目录
相关文章
|
2月前
|
Java 测试技术 API
【JUC】(1)带你重新认识进程与线程!!让你深层次了解线程运行的睡眠与打断!!
JUC是什么?你可以说它就是研究Java方面的并发过程。本篇是JUC专栏的第一章!带你了解并行与并发、线程与程序、线程的启动与休眠、打断和等待!全是干货!快快快!
433 2
|
2月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
156 1
|
2月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
172 1
|
10月前
|
存储 Linux API
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
|
8月前
|
并行计算 Linux
Linux内核中的线程和进程实现详解
了解进程和线程如何工作,可以帮助我们更好地编写程序,充分利用多核CPU,实现并行计算,提高系统的响应速度和计算效能。记住,适当平衡进程和线程的使用,既要拥有独立空间的'兄弟',也需要在'家庭'中分享和并行的成员。对于这个世界,现在,你应该有一个全新的认识。
285 67
|
12月前
|
调度 开发者 Python
深入浅出操作系统:进程与线程的奥秘
在数字世界的底层,操作系统扮演着不可或缺的角色。它如同一位高效的管家,协调和控制着计算机硬件与软件资源。本文将拨开迷雾,深入探索操作系统中两个核心概念——进程与线程。我们将从它们的诞生谈起,逐步剖析它们的本质、区别以及如何影响我们日常使用的应用程序性能。通过简单的比喻,我们将理解这些看似抽象的概念,并学会如何在编程实践中高效利用进程与线程。准备好跟随我一起,揭开操作系统的神秘面纱,让我们的代码运行得更加流畅吧!
|
6月前
|
调度 开发工具 Android开发
【HarmonyOS Next】鸿蒙应用进程和线程详解
进程的定义: 进程是系统进行资源分配的基本单位,是操作系统结构的基础。 在鸿蒙系统中,一个应用下会有三类进程:
203 0
|
9月前
|
SQL 监控 网络协议
YashanDB进程线程体系
YashanDB进程线程体系
|
11月前
|
消息中间件 调度
如何区分进程、线程和协程?看这篇就够了!
本课程主要探讨操作系统中的进程、线程和协程的区别。进程是资源分配的基本单位,具有独立性和隔离性;线程是CPU调度的基本单位,轻量且共享资源,适合并发执行;协程更轻量,由程序自身调度,适合I/O密集型任务。通过学习这些概念,可以更好地理解和应用它们,以实现最优的性能和资源利用。
355 11
|
11月前
|
Java Linux 调度
硬核揭秘:线程与进程的底层原理,面试高分必备!
嘿,大家好!我是小米,29岁的技术爱好者。今天来聊聊线程和进程的区别。进程是操作系统中运行的程序实例,有独立内存空间;线程是进程内的最小执行单元,共享内存。创建进程开销大但更安全,线程轻量高效但易引发数据竞争。面试时可强调:进程是资源分配单位,线程是CPU调度单位。根据不同场景选择合适的并发模型,如高并发用线程池。希望这篇文章能帮你更好地理解并回答面试中的相关问题,祝你早日拿下心仪的offer!
246 6

热门文章

最新文章

推荐镜像

更多
  • qt