【QT | 创建一个子线程监测某应用是否运行】

做一个植物大战僵尸的辅助,需要监测植物大战僵尸是否运行,在网上找了很久没有一个简单适用的,于是自己摸索一下,QT5.9.9创建一个子线程监测某应用是否运行,主要是解决子线程不堵塞主线程的执行,达到异步操作的效果。

在Headers中创建mythread.h

#ifndef MYTHREAD_H
#define MYTHREAD_H

#include <QThread>
//在mythread.h中定义MyThread类, 并继承QThread, 然后把框架写好
class MyThread : public QThread
{
    Q_OBJECT

public:
    MyThread();

private:

protected:
    void run();

signals:

public slots:


};

#endif // MYTHREAD_H

在Sources中创建一个mythread.cpp

#include "mythread.h"
#include "QDebug"
#include "QProcess"
// 构造函数
MyThread::MyThread()
{

}

bool CheckAppRunningStatus(const QString &appName)
{
#ifdef Q_OS_WIN
    QProcess* process = new QProcess;
    process->start("tasklist" ,QStringList()<<"/FI"<<"imagename eq " +appName);
    process->waitForFinished();
    QString outputStr = QString::fromLocal8Bit(process->readAllStandardOutput());
    if(outputStr.contains(appName)){
        return true;
    }
    else{
        return false;
    }
#endif
}

void MyThread::run()
{
    while (!isInterruptionRequested())
    {
        // 这里写入你要执行的代码,当没有收到线程结束会一直循环
        bool status = CheckAppRunningStatus("PlantsVsZombies.exe");//填入Exe的名字
        qDebug() << status;//输出信息到Debug控制台,用于调试
        sleep(1);
    }

    qDebug() << "Get Interruption Request, I'll exit.";
}



在Sources中的mainwindow.cpp创建进程并执行

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include "QDateTime"
#include "QDebug"
//主程序初始化
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //创建一个子线程
    my_thread = new MyThread;  // 实例化
    my_thread->start();  // 开启线程


    // 关闭线程
//    my_thread->requestInterruption();
//    my_thread->wait();
}

MainWindow::~MainWindow()
{
    delete ui;
}



void MainWindow::on_checkBox_2_stateChanged(int arg1)
{

}

void MainWindow::on_sunbtn_stateChanged(int arg1)
{

}


项目目录
项目目录
运行效果(false是表示植物大战僵尸现在没有运行)
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值