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

news2024/11/20 18:30:17

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内容:

#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:
};

windowservice.cpp内容:

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

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

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

The service QtServiceDemo could not start

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

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

再次运行就可以了。

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

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

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

autorun.bat

@echo off
start QtServiceDemo.exe -exec 
exit

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

谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1109102.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

清除el-form表单验证

当创建表单触发表单验证时&#xff0c;关闭弹窗&#xff0c;再次触发创建表单会触发表单验证&#xff0c;出现如下图所示情况&#xff1a; 在每次打开弹窗时&#xff0c;添加如下代码&#xff0c;清除表单验证 this.$nextTick( () > {this.$refs[forName].clearValidate()…

【STM32】--PZ6860L,STM32F4,ARM3.0开发板

一、ARM3.0开发板详细介绍 1.开发板整体介绍 &#xff08;1&#xff09;各种外设和主板原理图 &#xff08;2&#xff09;主板供电部分5V和3.3V兼容设计 注意跳线帽 2.STM32核心板介绍 3.核心板原理图 STM32和51的IO对应关系 下载电路 二、ARM3.0开发板ISP下载原理分析 1.I…

Git - 异常处理 : Git | SSL certificate problem: certificate has expired

解决方案: 关闭 https 证书验证即可 git config --global http.sslVerify false

运行 XXXApplication 时出错,命令行过长

运行 XXXApplication 时出错&#xff0c;命令行过长 问题原因&#xff1a;当在运行 XXXApplication 时遇到命令行过长的错误&#xff0c;通常是由于操作系统的限制导致的。在某些操作系统中&#xff0c;命令行的长度是有限制的&#xff0c;超过该限制会导致出错。 问题解决&am…

《动手学深度学习 Pytorch版》 9.2 长短期记忆网络(LSTM)

解决隐变量模型长期信息保存和短期输入缺失问题的最早方法之一是长短期存储器&#xff08;long short-term memory&#xff0c;LSTM&#xff09;。它与门控循环单元有许多一样的属性。长短期记忆网络的设计比门控循环单元稍微复杂一些&#xff0c;却比门控循环单元早诞生了近 2…

最新XFF注入攻击和代码分析技术

点击星标&#xff0c;即时接收最新推文 本文选自《web安全攻防渗透测试实战指南&#xff08;第2版&#xff09;》 点击图片五折购书 XFF注入攻击 XFF注入攻击的测试地址在本书第2章。 X-Forwarded-For简称XFF头&#xff0c;它代表客户端真实的IP地址&#xff0c;通过修改X-Forw…

Day 07 python学习笔记

函数 函数的传参 关键字参数 函数调用时&#xff0c;指定参数的名称&#xff0c;即为关键字参数 允许传入0个或者多个含参数名的参数关键字参数必须放在普通参数的后面 例&#xff1a; def abc(x,a,b):print(x)print(a)print(b)abc(100,b4,a2) #其中a,b作为关键字参数可以随意…

软件性能测试-初步分析性能瓶颈

完成工具使用和脚本编写后&#xff0c;剩下的流程是执行和结果分析&#xff0c;以及复测。现在来学学结果分析&#xff0c;主要是要学会判断压力的来源&#xff0c;当响应时间远远超出我们的期望&#xff0c;测试人员如何判断是由于什么导致的过载响应。 一、性能瓶颈出现的表…

Spring Security登录表单配置(3)

1、登录表单配置 1.1、快速入门 理解了入门案例之后&#xff0c;接下来我们再来看一下登录表单的详细配置&#xff0c;首先创建一个新的Spring Boot项目&#xff0c;引入Web和Spring Security依赖&#xff0c;代码如下&#xff1a; <dependency><groupId>org.sp…

竹云荣膺2023粤港澳大湾区高质量发展标杆企业

10月12日&#xff0c;由深圳市前海深港现代服务业合作区管理局指导&#xff0c;广东省粤港澳大湾区产业协同发展联合会&#xff08;简称&#xff1a;湾区产联&#xff09;、香港大湾区工商业联合会主办的“深港合作前海向前”2023粤港澳大湾区高质量发展企业发布会、香港大湾区…

[计算机提升] 环境变量

1.5 环境变量 在Windows系统中&#xff0c;环境变量是一组参数或值&#xff0c;用于配置和控制操作系统的行为。它们用来确定系统的默认设置、执行文件路径以及其他系统行为。环境变量可以被所有的应用程序和命令行工具访问和使用&#xff0c;而不需要每次手动指定路径或设置参…

SELECT COUNT(*) 会造成全表扫描吗?

前言 SELECT COUNT(*)会不会导致全表扫描引起慢查询呢&#xff1f; SELECT COUNT(*) FROM SomeTable 网上有一种说法&#xff0c;针对无 where_clause 的 COUNT(*)&#xff0c;MySQL 是有优化的&#xff0c;优化器会选择成本最小的辅助索引查询计数&#xff0c;其实反而性能…

笔记本触摸板没反应?实用技巧助你成功修复!

笔记本电脑是我们日常工作和学习的得力工具之一&#xff0c;而触摸板作为一个重要的输入设备&#xff0c;对于操作的流畅性至关重要。然而&#xff0c;有时候我们可能会遇到笔记本触摸板没反应的问题&#xff0c;这可能会导致困扰和不便。本文将介绍解决笔记本触摸板无响应问题…

SPSS|偏度和峰度|正态性分布检验|实战小练-SPSS学习(1)

目录 学习目的软件版本基础数据实战数据准备数据初探输出结果分析两个重要统计量&#xff1a;偏度和峰度正态性检验结果其他图件输出 学习目的 检验数据集是否服从正态分布。 软件版本 IBM SPSS Statistics 26。 基础数据 一组数据&#xff0c;如&#xff1a;73 76 78 77 …

ES6 Promise

1.Promise 是异步编程的一种解决方案 const promise new Promise(function(resolve, reject) {if (/* 异步操作成功 */){resolve(value);} else {reject(error);} }) 2.Promise的三种状态 待定&#xff08;pending&#xff09;: 初始状态&#xff0c;既没有被兑现&#xff…

情绪即需求

情绪即需求 心理学认为&#xff0c;每个情绪背后都藏着一个未被满足的心里需求. 模型介绍 每一个情绪背后&#xff0c;都有一个未被满足的心理需求。情绪没有好坏之分&#xff0c;存在即合理。情绪是人类不断进化的产物&#xff0c;每一种情绪都是在保护我们&#xff0c;都有其…

一起学数据结构(9)——二叉树的链式存储及相关功能实现

目录 1. 二叉树的链式存储&#xff1a; 2. 二叉树的前序遍历&#xff1a; 3. 二叉树的中序遍历&#xff1a; 4. 二叉树的后序遍历&#xff1a; 5. 统计二叉树的结点总数 6.统计二叉树的叶子结点数&#xff1a; 7. 统计二叉树第层的结点数量&#xff1a; 8. 二叉树的销毁…

如何修改模型颜色

1、模型材质颜色介绍 在3D模型中&#xff0c;材质&#xff08;Material&#xff09;是指表面质感的特性&#xff0c;包括颜色、光泽、透明度等属性。其中&#xff0c;颜色是最基本的属性之一&#xff0c;它决定了物体表面的外观和感觉。 在现代计算机图形学中&#xff0c;通常…

使用 Typhoeus 和 Ruby 编写的爬虫程序

以下是一个使用 Typhoeus 和 Ruby 编写的爬虫程序&#xff0c;用于爬取 &#xff0c;同时使用了 jshk.com.cn/get_proxy 这段代码获取代理&#xff1a; #!/usr/bin/env rubyrequire typhoeus require jsondef get_proxyurl "https://www.duoip.cn/get_proxy"respon…

CTF是黑客大赛?新手如何入门CTF?

CTF是啥 CTF 是 Capture The Flag 的简称&#xff0c;中文咱们叫夺旗赛&#xff0c;其本意是西方的一种传统运动。在比赛上两军会互相争夺旗帜&#xff0c;当有一方的旗帜已被敌军夺取&#xff0c;就代表了那一方的战败。在信息安全领域的 CTF 是说&#xff0c;通过各种攻击手…