• QtService实现Qt后台服务程序其一_基本使用步骤


    QtService基本使用步骤

    1、QtService介绍

    QtService是一个用于实现windows服务或unix守护进程的开源项目,本文使用QtService演示如何实现一个windows下的后台进程,可用于一些简单的windows服务程序中。

    测试使用Qt5.9.2版本。

    2、项目引入QtService

    下载的QtService,是一个qtservice文件夹,文件夹打开后内容包括:

    准备好后,将qtservice文件夹放到项目根目录下。

    在项目.pro文件夹下加入下面一行引入即可:

    include($$PWD/qtservice/src/qtservice.pri)

    3、使用方式

    加入windowservice类

    windowservice.h内容:

    1. #pragma once
    2. #include
    3. #include "qtservice.h"
    4. class WindowService : public QtService
    5. {
    6. public:
    7. WindowService(int argc, char **argv);
    8. ~WindowService()override;
    9. protected:
    10. void start()override;
    11. void stop()override;
    12. void pause()override{}
    13. void resume()override{}
    14. private:
    15. };

    windowservice.cpp内容:

    1. #include "windowservice.h"
    2. #include
    3. WindowService::WindowService(int argc, char **argv)
    4. : QtService(argc, argv, "QtServiceDemo")
    5. {
    6. setServiceDescription("QtService Demo");
    7. setServiceFlags(QtServiceBase::CanBeSuspended);
    8. }
    9. WindowService::~WindowService()
    10. {
    11. }
    12. void WindowService::start()
    13. {
    14. qDebug() << __FUNCTION__;
    15. }
    16. void WindowService::stop()
    17. {
    18. qDebug() << __FUNCTION__;
    19. }

    main.cpp中调用

    1. #include "windowservice.h"
    2. int main(int argc, char *argv[])
    3. {
    4. WindowService service(argc, argv);
    5. return service.exec();
    6. }

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

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

    The service QtServiceDemo could not start

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

    如果要在Qt Creator中直接启动的话,那只需要配置一下启动参数即可,如下:

    再次运行就可以了。

    正常情况下,在Qt中Debug、Release可以正常调试服务程序,但是不会生成生成服务。

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

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

    autorun.bat

    1. @echo off
    2. start QtServiceDemo.exe -exec
    3. exit

    文章参考:使用QtService实现Qt后台服务程序_luoyayun361的博客-CSDN博客

    谢谢!

  • 相关阅读:
    代码随想录二刷day38
    AR手势识别交互,让应用更加“得心应手”
    CRUSE: Convolutional Recurrent U-net for Speech Enhancement
    复杂的指针面试题
    iOS关于高德地图定位和热点搜索使用小结
    【日常需求】一次使用EasyExcel而引发的问题与思考~
    2.cuBLAS开发指南中文版--使用cuBLAS API
    看见艺术·听见艺术 飞利浦大艺术家视听盛宴佛山站 圆满结束!
    【图灵诸葛】jvm笔记
    Camera驱动基础--硬件接口相关知识介绍
  • 原文地址:https://blog.csdn.net/csdndenglu/article/details/133919790