Qt优秀开源项目之十八:QtService

文章介绍了如何利用开源项目QtService创建Windows服务,包括将源码集成到项目中,编写服务类,以及服务的启动、停止、安装和卸载操作。通过示例代码展示了QtService的简单易用性,使得服务管理更加人性化。
摘要由CSDN通过智能技术生成

QtService是一个用于实现Windows服务或unix守护进程的开源项目
github地址:https://github.com/qtproject/qt-solutions/tree/master/qtservice
源码可以编译成动态库,也可以直接在项目中引用源码
源码目录qtservice/examples中包含了三个例子,值得参考

一.试用

1.新建一个控制台程序TestServer2

然后将qtservice源码拷贝到项目中

参考例子qtservice/examples/server,写一个最简单的Windows服务

#include <QCoreApplication>
#include <QDebug>

#include "qtservice.h"

class TestService2 : public QtService<QCoreApplication>
{
public:
    TestService2(int argc, char **argv) : QtService<QCoreApplication>(argc, argv, "TestService2")
    {
        setServiceDescription("TestService2 cao shang pa");
        setServiceFlags(QtServiceBase::CanBeSuspended);
    }

    ~TestService2(){};

protected:
    void start()override
    {

        // 将服务要做的事情放在这里.
        qDebug() << Q_FUNC_INFO;
    }
    void stop()override
    {
        qDebug() << Q_FUNC_INFO;
    }
    void pause()override
    {

    }
    void resume()override
    {

    }
};

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

pro文件如下

QT -= gui

CONFIG += c++11 console
CONFIG -= app_bundle

DESTDIR = out

SOURCES += \
        main.cpp

include(qtservice/src/qtservice.pri)

这样一个Windows服务程序就完成了,是不是超简单。

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

include(qtservice/src/qtservice.pri)

3.运行

以管理员权限启动cmd窗口,cd到TestService2/out,执行:

TestService2.exe -h

输出基本用法


①安装服务

TestService2.exe -i


此时在“计算机管理”窗口中可以看到安装的服务,不过此时的服务并未运行


②启动服务

TestService2.exe

直接这样就行,没有参数,此时服务显示正在运行


③停止服务

TestService2.exe -t

④卸载服务

TestService2.exe -u

其他的参数可以自己尝试

PS:如果想在代码中控制服务,参考这个例子qtservice/examples/controller

二.原理

之前分享过C++之创建Windows系统服务,QtServer在Windows上的实现,实际上也是调用的WIndows API,如下图所示


其实所有第三方库底层原理都一样,都是调用的系统API,能够脱颖而出的必然是接口简单、性能牛叉的。QtServer使复杂的工作不仅简单化,还人性化——当执行TestService2.exe -e时,TestService2.exe就是一个普通的Qt应用程序,start函数中的调试信息能直接打印到控制台上。不用像C++之创建Windows系统服务中那样使用DebugView来捕获调试信息了

原文链接:https://blog.csdn.net/caoshangpa/article/details/130276690

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

草上爬

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

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

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

打赏作者

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

抵扣说明:

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

余额充值