使用QtService实现Qt后台服务程序

138 篇文章 196 订阅

QtService

QtService是一个用于实现windows服务或unix守护进程的开源项目,下载地址

本文使用QtService演示如何实现一个windows下的后台进程,可用于一些简单的windows服务程序中。


本文示例代码下载


源码

在以上地址中将源代码下载到本地,目录结构如下:
在这里插入图片描述
这里面有包含了几个示例程序,可以做参考。
可以直接编译源码生成动态库然后在自己项目中使用,当然也可以直接在项目中引用源码。

示例

为方便演示,我们新建一个工程,介绍如何使用。

新建一个控制台程序
然后将qtservice源码拷贝到项目中,新建一个类windowservice

在这里插入图片描述

在工程文件pro中添加源码引用

include(qtservice/src/qtservice.pri)

windowservice类很简单

#pragma once

#include <QCoreApplication>
#include "qtservice.h"


class WindowService : public QtService<QCoreApplication>
{
public:
    WindowService(int argc, char **argv);
    ~WindowService()override;
protected:
    void start()override;
    void stop()override;
    void pause()override{}
    void resume()override{}

private:
};

#include "windowservice.h"
#include <QDebug>

WindowService::WindowService(int argc, char **argv)
    : QtService<QCoreApplication>(argc, argv, "QtServiceDemo")
{
    setServiceDescription("QtService Demo");
    setServiceFlags(QtServiceBase::CanBeSuspended);
}

WindowService::~WindowService()
{
}

void WindowService::start()
{
    qDebug() << __FUNCTION__;
}

void WindowService::stop()
{
    qDebug() << __FUNCTION__;
}

main.cpp中更简单了

#include "windowservice.h"

int main(int argc, char *argv[])
{
    WindowService service(argc, argv);
    return service.exec();
}

这就ok了,使用非常简单。服务启动后会自动进入到start()这个虚函数中,其他几个函数同理,那么在实际项目中, 只需要将自己要执行的内容放到start()中就可以了。

运行项目,会看到一个报错:

The service QtServiceDemo could not start

别着急,这不是代码的问题,这是因为服务的启动需要添加一个启动参数,-exec 或者更简单点 -e

如果要在Qt Creator中直接启动的话,那只需要配置一下启动参数即可,如下:
在这里插入图片描述
再次运行就可以了。

通常,后台服务程序都是由一个主程序去调用启动,如果是在Qt主程序中调用,可以使用QProcess完成,也是要添加启动参数才行。

那如果要直接双击运行的话,由于需要运行参数,所以不能直接双击打开执行程序,可以通过一个脚本调用来打开:

autorun.bat

@echo off
start QtServiceDemo.exe -exec 
exit

以上示例代码下载

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luoyayun361

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值