qtService组件使用说明.docx

上传人:b****9 文档编号:24961434 上传时间:2023-06-03 格式:DOCX 页数:23 大小:23.39KB
下载 相关 举报
qtService组件使用说明.docx_第1页
第1页 / 共23页
qtService组件使用说明.docx_第2页
第2页 / 共23页
qtService组件使用说明.docx_第3页
第3页 / 共23页
qtService组件使用说明.docx_第4页
第4页 / 共23页
qtService组件使用说明.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

qtService组件使用说明.docx

《qtService组件使用说明.docx》由会员分享,可在线阅读,更多相关《qtService组件使用说明.docx(23页珍藏版)》请在冰豆网上搜索。

qtService组件使用说明.docx

qtService组件使用说明

qtService组件使用说明

一、描述

QtService组件可用于开发Windows服务和Unix守护进程。

该项目提供的QtService模板类可用于实现服务应用程序,QtServiceController类可用于控制服务。

在Windows系统用服务控制管理器实现。

在Unix系统服务用守护进程实现。

二、类说明:

1、QtServiceController

QtServiceController类提供了一组函数,可实现从另外的应用程序来安装和运行服务并查询、控制其执行状态。

成员类型:

enumQtServiceController:

:

StartupType

启动类型:

常量

描述

QtServiceController:

:

AutoStartup

0

随系统启动自动启动。

QtServiceController:

:

ManualStartup

1

手动启动。

仅用于Windows环境

成员函数:

QtServiceController:

:

QtServiceController(const QString&name)

创建指定名称服务的控制器。

QtServiceController:

:

〜QtServiceController()   [virtual]

销毁服务控制器。

boolQtServiceController:

:

install(const QString&serviceFilePath,constQString&account =QString(),const QString&password =QString())  [static]

为指定文件安装服务,如安装成功返回true,否则返回false。

在Windows中使用给定的帐户和密码安装服务到服务控制管理器中。

在Unix服务配置中,使用“QtSoftware”作为组织名称写入QSettings:

:

SystemScope。

帐户和密码参数被忽略。

boolQtServiceController:

:

isInstalled()const

检测服务是否安装,如已安装则返回true; 否则返回false。

boolQtServiceController:

:

isRunning()const

检测服务运行状态,正在运行则返回true; 否则返回false。

boolQtServiceController:

:

pause()

暂停服务,成功暂停则返回true; 否则返回false。

仅当服务状态为QtServiceBase:

:

CanBeSuspended时支持服务暂停。

boolQtServiceController:

:

resume()

服务继续,服务成功恢复,则返回true; 否则返回false。

boolQtServiceController:

:

sendCommand(int code)

将用户命令代码发送到服务,如请求成功发则返回true; 否则返回false。

该服务将调用QtServiceBase:

:

processCommand()实现。

QString QtServiceController:

:

serviceDescription()const

返回服务的描述。

QString QtServiceController:

:

serviceFilePath()const

返回服务相关的文件路径。

QString QtServiceController:

:

serviceName()const

返回服务名称。

boolQtServiceController:

:

start(const QStringList&arguments)

启动服务,并传递参数。

启动成功则返回true; 否则返回false。

boolQtServiceController:

:

start()

启动服务,不传递参数。

StartupType QtServiceController:

:

startupType()const

返回服务启动类型。

boolQtServiceController:

:

stop()

停止服务。

停止成功则返回true; 否则为false。

boolQtServiceController:

:

uninstall()

卸载服务,成功则返回true; 否则返回false。

使用系统的服务控制管理器卸载Windows服务。

在Unix服务配置中,使用QSettings:

:

SystemScope以“QtSoftware”作为组织名称来清除。

2、QtServiceBase

QtServiceBase类提供了一个用于实现Windows服务和Unix守护进程的API。

服务通常是非交互式控制台应用程序。

可以使用QtServiceController:

:

sendCommand()和QtService:

:

processCommand(),结合使用共享设置文件实现简单的通信。

服务应用程序的main函数实例:

intmain(intargc,char**argv)

{

MyServiceservice(argc,argv);

returnservice.exec();

}

命令行参数说明:

短参数

长参数

说明

-i

-install

安装服务。

-u

-uninstall

卸载服务。

-e

-exec

作为独立应用程序执行。

-t

-terminate

停止服务。

-p

-pause

暂停服务。

-r

-resume

恢复暂停的服务。

-ccmd

--commandcmd

将用户定义的命令代码cmd发送到服务应用程序。

-v

-version

显示版本和状态信息。

缺省参数时,exec()将依次调用createApplication()、executeApplication()、start()函数后启动服务等待来自服务控制器的命令。

成员类型:

enumQtServiceBase:

:

MessageType

消息类型:

常量

描述

QtServiceBase:

:

Success

0

操作已成功,例如服务已启动。

QtServiceBase:

:

Error

1

操作失败,例如服务无法启动。

QtServiceBase:

:

Warning

2

操作导致可能需要用户交互的警告。

QtServiceBase:

:

Information

3

任何类型的通常非关键的信息。

enumQtServiceBase:

:

ServiceFlag

flagsQtServiceBase:

:

ServiceFlags

服务标识:

常量

描述

QtServiceBase:

:

Default

0x00

服务可以停止,但不会暂停。

QtServiceBase:

:

CanBeSuspended

0x01

服务可以暂停。

QtServiceBase:

:

CannotBeStopped

0x02

无法停止服务。

QtServiceBase:

:

NeedsStopOnShutdown

0x04

(仅限Windows)服务将在系统关闭之前停止。

ServiceFlags类型用QFlags 定义,其值可以采用“或”组合的形式存储。

成员函数:

QtServiceBase:

:

QtServiceBase(int argc,char** argv,const QString&name)

创建服务实例,命名为name。

调用exec()函数后解析argc和argv参数,并被传递给应用程序的构造函数。

应用程序类型由QtService子类确定。

服务既未安装也未启动。

服务名称不能包含任何反斜杠,长度不超过255个字符。

此外,该名称在系统的服务数据库中必须是唯一的。

QtServiceBase:

:

〜QtServiceBase()   [virtual]

销毁服务对象。

既不停止也不卸载服务。

voidQtServiceBase:

:

createApplication(int&argc,char** argv)   [purevirtualprotected]

使用argc和argv参数创建应用程序对象。

此函数仅在服务构造时未使用特定服务参数时使用,由exec()在调用executeApplication()和start()函数之前调用。

可在构造需要额外参数的应用程序时重新实现createApplication()函数。

intQtServiceBase:

:

exec()

执行服务。

exec()函数将解析在argv中传递的特定服务参数,执行所需的操作,然后退出。

没有服务特定参数时,exec()将依次调用createApplication()、executeApplication()、start()函数后返回,同时启动服务等待服务控制器的命令。

intQtServiceBase:

:

executeApplication()   [purevirtualprotected]

执行以前使用createApplication()函数创建的应用程序。

此函数仅在服务构造时未使用特定服务参数时使用,由exec()在调用createApplication()和start()两函数之间调用。

QtServiceBase*QtServiceBase:

:

instance()   [static]

返回一个指向当前应用程序的QtServiceBase实例指针。

voidQtServiceBase:

:

logMessage(const QString&message,MessageType type=Success,int id =0,uint category =0,const QByteArray&data =QByteArray())

写日志消息。

message:

消息内容

id:

消息标识符

category:

消息类别

data:

可以包含任意二进制数据。

在Windows系统注册表中注册的消息文件要求必须提供消息字符串的id和category,参阅MSDN。

voidQtServiceBase:

:

pause()   [virtualprotected]

暂停服务,虚函数需重新实现(如停止轮询计时器或忽略套接字通知程序)。

voidQtServiceBase:

:

processCommand(int code)   [virtualprotected]

处理用户命令代码,虚函数需重新实现。

voidQtServiceBase:

:

resume()   [virtualprotected]

暂停服务后恢复,虚函数需重新实现。

QString QtServiceBase:

:

serviceDescription()const

返回服务的描述。

ServiceFlags QtServiceBase:

:

serviceFlags()const

返回使用ServiceFlag枚举描述的服务状态,如是否可暂停、关机前是否需停止服务等标识。

QString QtServiceBase:

:

serviceName()const

返回服务名称。

voidQtServiceBase:

:

setServiceDescription(const QString&description)

设置服务描述。

voidQtServiceBase:

:

setServiceFlags(ServiceFlags flags)

设置服务标志的状态。

voidQtServiceBase:

:

setStartupType(QtServiceController:

:

StartupType type)

设置服务启动类型。

voidQtServiceBase:

:

start()   [purevirtualprotected]

启动服务,虚函数必须在QtServiceBase子类中实现。

此函数是服务的核心,可在此创建需要的主要对象。

此函数仅在服务构造时未使用特定服务参数时使用,由exec()在调用executeApplication()函数之后调用。

QtServiceController:

:

StartupType QtServiceBase:

:

startupType()const

返回服务启动类型。

voidQtServiceBase:

:

stop()   [virtualprotected]

停止服务,虚函数需重新实现。

可在此处执行服务关闭前的清理工作,比如删除在start()函数中创建主对象等。

3、QtService

QtService是一个为应用程序创建后台服务的模板类。

服务通常是非交互式控制台应用程序,但是可以通过QtServiceController:

:

sendCommand()和QtService:

:

processCommand()结合使用一个共享设置文件进行些简单的通信。

注意:

在Unix系统上,此类依赖于QtNetwork模块工具。

使用示例:

classMyService:

publicQtService

{

public:

MyService(intargc,char**argv);

~MyService();

protected:

voidstart();

voidstop();

voidpause();

voidresume();

voidprocessCommand(intcode);

};

intmain(intargc,char**argv)

{

MyServiceservice(argc,argv);

returnservice.exec();

}

使用QCoreApplication适用于没有GUI的服务,QApplication适用于有GUI的服务。

需要通过重新实现QtServiceBase:

:

start()函数来执行服务的核心工作。

需要重新实现QtServiceBase:

:

pause(),QtServiceBase:

:

processCommand(),QtServiceBase:

:

resume()和QtServiceBase:

:

stop()等函数响应控制器干预服务的请求。

exec()函数解析argv中传递的服务特定参数,执行所需的操作,然后退出。

当argv中没有传递服务特定参数时,exec()将依次调用createApplication()、executeApplication()、start()函数后返回,此时服务启动等待服务控制器的命令。

成员函数:

QtService:

:

QtService(int argc,char** argv,const QString&name)

构造名为name的服务对象。

argc和argv中的参数在exec()函数解析后传递给应用程序的构造函数。

在一个进程中只能有一个QtService对象。

QtService:

:

〜QtService()

销毁服务对象。

Application*QtService:

:

application()const[protected]

返回指向应用程序对象的指针。

voidQtService:

:

createApplication(int&argc,char** argv)   [virtualprotected]

创建应用程序类型的应用程序对象,将argc和argv传递给其构造函数,虚函数需重新实现。

intQtService:

:

executeApplication()   [virtualprotected]

执行以前使用createApplication()函数创建的应用程序,虚函数需重新实现。

三、示例

1、AnInteractiveService互动服务

这个例子演示了如何建立QtService类的子类,如何使用start(),stop(),pause(),resume(),以及如何使用processCommand()在运行时接收控制命令。

#include

#include

#include

#include

#include

#include"qtservice.h"

classInteractiveService:

publicQtService

{

public:

InteractiveService(intargc,char**argv);

~InteractiveService();

protected:

voidstart();

voidstop();

voidpause();

voidresume();

voidprocessCommand(intcode);

private:

QLabel*gui;

};

InteractiveService:

:

InteractiveService(intargc,char**argv)

:

QtService(argc,argv,"QtInteractiveService"),gui(0)

{

setServiceDescription("AQtservicewithuserinterface.");

setServiceFlags(QtServiceBase:

:

CanBeSuspended);

}

InteractiveService:

:

~InteractiveService()

{

}

voidInteractiveService:

:

start()

{

#ifdefined(Q_OS_WIN)

if((QSysInfo:

:

WindowsVersion&QSysInfo:

:

WV_NT_based)&&

(QSysInfo:

:

WindowsVersion>=QSysInfo:

:

WV_VISTA)){

logMessage("ServiceGUInotallowedonWindowsVista.Seethedocumentationforthisexampleformoreinformation.",QtServiceBase:

:

Error);

return;

}

#endif

qApp->setQuitOnLastWindowClosed(false);

gui=newQLabel("Service",0,Qt:

:

WindowStaysOnTopHint|Qt:

:

FramelessWindowHint);

gui->move(QApplication:

:

desktop()->availableGeometry().topLeft());

gui->show();

}

voidInteractiveService:

:

stop()

{

deletegui;

}

voidInteractiveService:

:

pause()

{

if(gui)

gui->hide();

}

voidInteractiveService:

:

resume()

{

if(gui)

gui->show();

}

voidInteractiveService:

:

processCommand(intcode)

{

gui->setText("Commandcode"+QString:

:

number(code));

gui->adjustSize();

}

intmain(intargc,char**argv)

{

#if!

defined(Q_WS_WIN)

//QtService在SystemScope中存储服务设置,通常需要root权限。

//要想用非root用户测试此例,需更改SystemScope设置文件中的目录

QSettings:

:

setPath(QSettings:

:

NativeFormat,QSettings:

:

SystemScope,QDir:

:

tempPath());

qWarning("(Exampleusesdummysettingsfile:

%s/QtSoftware.conf)",QDir:

:

tempPath().toLatin1().constData());

#endif

InteractiveServiceservice(argc,argv);

returnservice.exec();

}

2、AsimpleHTTPServerHTTP服务器

监听端口默认为8080。

为每个GET请求返回一个简单的HTML页面后,关闭连接。

classHttpDaemon:

publicQTcpServer

{

Q_OBJECT

public:

HttpDaemon(quint16port,QObject*parent=0):

QTcpServer(parent),disabled(false)

{

listen(QHostAddress:

:

Any,port);

}

voidincomingConnection(intsocket)

{

if(disabled)

return;

//当一个新的客户端连接时,服务器构造一个QTcpSocket与客户端的通信。

//由于QTcpSocket是异步工作的,这意味着所有的通信都是在readClient()和discardClient()两个槽中完成。

QTcpSocket*s=newQTcpSocket(this);

connect(s,SIGNAL(readyRead()),this,SLOT(readClient()));

connect(s,SIGNAL(disconnected()),this,SLOT(discardClient()));

s->setSocketDescriptor(socket);

QtServiceBase:

:

instance()->logMessage("NewConnection");

}

voidpause()

{

disabled=true;

}

voidresume()

{

disabled=false;

}

privateslots:

voidreadClient()

{

if(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1