windows 服务程序和桌面程序集成(四)桌面程序

news2024/9/25 13:22:58

系列文章目录链接:

  1. windows 服务程序和桌面程序集成(一)概念介绍
  2. windows 服务程序和桌面程序集成(二)服务程序
  3. windows 服务程序和桌面程序集成(三)UDP监控工具
  4. windows 服务程序和桌面程序集成(四)桌面程序
  5. windows 服务程序和桌面程序集成(五)集成为一个EXE
  6. windows 服务程序和桌面程序集成(六)集成安装、启动、卸载功能
  7. windows 服务程序和桌面程序集成(七)效果演示及源程序下载
     

对于VCL桌面程序就非常简单,如何创建一级如何运行就不在啰嗦。

这个桌面程序就是和 windows 服务程序和桌面程序集成(二)服务程序 共享Public目录下的uWorkThread.pas单元。

程序中的4个按键就是围绕 uWorkerThread.pas 单元设置的。这个程序目前和 windows 服务程序和桌面程序集成(二)服务程序 中的服务程序没有直接关系,理解就是一个简单的VCL桌面程序,调用一个线程发送UDP消息而已。他们共享了线程单元uWorkerThread.pas,这个是重点!

 uMainForm.pas代码如下:

unit uMainForm;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses
  uWorkerThread;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  //创建工作线程
  if WorkThread = nil then
     WorkThread := TWorkThread.Create;
  WorkThread.FreeOnTerminate := True;    //完成后直接释放
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 WorkThread.Pause;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  WorkThread.Continue;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  WorkThread.Terminate;
  while not WorkThread.Finished do
    begin
      Sleep(200);
    end;
  WorkThread := nil;

end;

end.

uWorkerThread.pas代码:

unit uWorkerThread;

interface
uses
  System.Classes,
  IdUDPClient,
  IdGlobal,
  System.SysUtils;
  //Winapi.Windows;

type
  //实际工作线程类
  TWorkThread = Class(TThread)
     private
       FPaused : Boolean;   //
     protected
       constructor Create;
       procedure Execute; override;
     public
       procedure Pause;
       procedure Continue;
  End;
//服务执行的函数,UDP发送消息函数
procedure Send_UDP_Info(str : string);

var
  //工作线程变量
  WorkThread : TWorkThread;

implementation

procedure Send_UDP_Info(str : string);
var
  UDPClient: TIdUDPClient;
  B : TBytes;
begin
  UDPClient := TIdUDPClient.Create(nil);
  try
    UDPClient.BroadcastEnabled := True;
    B := TEncoding.UTF8.GetBytes(str);
    //只给本机发送,这个地方只需要给本机发送广播消息即可 2023-03-04
    UDPClient.Broadcast(TidBytes(B),8192,'127.0.0.1');  //端口号
    //广播到任何地方
    //UDPClient.Broadcast(TidBytes(B),G_UDPPort);  //端口号
  finally
    UDPClient.Free;
  end;
end;


{ TWorkThread }

procedure TWorkThread.Continue;
begin
  FPaused := False;
  Send_UDP_Info('服务继续工作....');
end;

constructor TWorkThread.Create;
begin
  FPaused := False;
end;

procedure TWorkThread.Execute;
var
  S : string;
begin
  inherited;
  while not Terminated do
  begin
    if not FPaused then
       begin
         S := FormatDateTime('YYYY-MM-DD hh:mm:ss',Now);
         Send_UDP_Info(S);
       end;
    TThread.Sleep(1000);
  end;

  Send_UDP_Info('********** 服务终止工作 **********');
end;

procedure TWorkThread.Pause;
begin
  FPaused := True;
  Send_UDP_Info('服务暂停工作!!!');
end;

end.

下一篇:windows 服务程序和桌面程序集成(五)集成为一个EXE

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

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

相关文章

试用了市面上95%的报表工具,终于找到这款万能报表工具,太牛了!

经常有粉丝问我有“哪个报表工具好用易上手?”或者是“有哪些适合绝大多数普通职场人的万能报表工具?” 从这里我大概总结出了大家选择报表工具最期望满足的3点: (1)简单易上手:也就是所谓的学习门槛要低…

上位机开发:必备的关键知识和技能

上位机开发涉及多个方面的知识和技能。以下是您在学习上位机开发时可能需要关注的一些关键领域: 编程语言:选择一种适合上位机开发的编程语言。常用的选择包括C/C、Python和Java等。您需要学习该语言的语法、数据结构、面向对象编程等基本概念。 界面设…

Mysql8.0常用命令

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、登录二、查看端口三、修改端口四、重启Mysql五、创建新用户六、修改密码七、给指定用户分配权限八、删除用户九、远程链接 访问权限 安装参考的:添加…

C++ 超市商品管理系统

题目3 超市商品管理系统设计 1、问题描述 超市中商品分为四类,分别是食品、化妆品、日用品和饮料。每种商品都包含商品名称价格、库存量和生产厂家、品牌等信息 主要完成对商品的销售、统计和简单管理 2、功能要求 (1) 销售功能。购买商品时,先输入类别&…

Linux基础知识点1

Linux概述 Linux的特点: 多用户多任务、开源、安全、稳定 Linux系统的开发模型: 集市模型 Linux的版本: 内核版本和发行版本 内核版本和发行版本含义或区别? 答: 内核版本:Linux 操作系统的内核程序版…

【深入探讨】区块链是工业物联网发展的基石

发表时间:2023年4月6日 区块链技术能否成为工业物联网的基石?最近在巴厘岛举办的物联网和智能系统(IoTAIS)活动上,nChain首席科学家Craig S. Wright博士解答了这个问题。 Wright博士谈到了在BSV交易账本上运行的工业互…

VirusTotal——您身边的企业安全专家

【本文由 Cloud Ace 整理发布。Cloud Ace 是谷歌云全球战略合作伙伴,拥有 300 多名工程师,也是谷歌最高级别合作伙伴,多次获得 Google Cloud 合作伙伴奖。作为谷歌托管服务商,我们提供谷歌云、谷歌地图、谷歌办公套件、谷歌云认证…

你真的会写软件测试简历吗?为什么面试约不到,测试老鸟的建议...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 写好一份简历的三…

python---函数(2)

函数的递归 递归代码的两个要素: 1.递归结束条件 2.递归递推公式 递归的缺点: 1.执行过程非常复杂,难以理解 2.容易出现栈溢出的情况 3.递归代码一般可以转换成等价的循环代码,并且循环比递归快 递归的有点: 代码简洁,尤其是处理问题本身就是通过递归的方式定义的时候 函数…

动态NAT实验:配置和验证动态网络地址转换

动态NAT实验:配置和验证动态网络地址转换 【实验目的】 部署动态NAT。熟悉动态NAT的应用方法。验证配置。 【实验拓扑】 实验拓扑如图所示。 实验拓扑 设备参数如表所示。 设备参数表 设备 接口 IP地址 子网掩码 默认网关 R1 f0/0 192.168.10.1 255.25…

《程序员的自我修养--链接、装载与库》笔记

写在前面:本文是我在阅读《程序员的自我修养–链接、装载与库》一书时做的笔记,所谓好记性不如烂笔头嘛,其中主要摘抄记录了本人着重阅读的章节;除此之外还有小部分本人对书中内容的个人理解、以及文章中出现的小错误标明&#xf…

【电路】电路与电子技术基础 课堂笔记 第14章 触发器

触发器是数字电路中的一种记忆部件, 这一章需要关注的焦点是:各种触发器的特点、状态方程、激励表、状态转移图以及时序图等。 14.1 基本触发器 14.1.1 基本触发器的逻辑结构和工作原理 14.1.2 基本触发器功能的描述 1. 状态转移真值表 2. 特征方程&…

测试通过了,为何线上还有很多BUG?

大多数测试人员认为测试工作是发现bug,虽然这是测试的主要任务,但其实测试最重要的任务是质量控制,而发现bug和验证bug只是质量控制的一个重要环节而已。 我想很多测试人员都经历过这样的场景,就是测试环境全部都能测试通过&…

浅析小程序的三个特点

随着智能手机的普及,全民互联网时代到来,我们身边越来越多的人开始使用微信账号,很多时候微信能够替代一些其他的应用,比如在手机支付方面微信也是占据了一部分的市场份额的,因此微信小程序面对的用户群体之广我们也可…

【TA 100】3.1 模板测试和深度测试

一、开始前,先看一下举例来理解 1.引例 ● 左图为颜色缓冲区中的一张图,在模板缓冲区中我们会给这张图的每一个片元分配一个0-255的数字(8位,默认为0) ● 中、右图可以看到,我们修改了一些0为1&#xff0c…

Java(一):创建 Spring Boot 项目并实现连接操作MySQL数据库

创建 Spring Boot 项目并实现连接操作MySQL数据库 准备MySQLMavenidea所需插件下载 idea创建项目配置 Server URL填写项目相关信息创建项目成功(运行并测试) idea测试能否正常连接MySQL创建数据库表添加项目内连接MySQL的配置搜索连接MySQL使用的依赖包编…

PHP 使用html创建PDF并设置水印

使用TCPDF库给PDF文件加水印,需要注意无法直接使用文本,需要创建水印图片后,通过图片来设置水印效果。 目录 创建PDF 创建合同模板 创建pdf文件 简单创建 设置文档信息 去掉默认页头脚 设置间距 设置字体支持中文 设置图片比例因子 …

JMeter-BeanShell预处理程序和BeanShell后置处理程序的应用

目录 引言 一、什么是BeanShell? 二、BeanShell Preprocessor(BeanShell预处理程序)的基本应用 引言 你知道吗,JMeter不仅能够进行压力测试和性能分析,还可以使用BeanShell预处理程序和BeanShell后置处理程序来优化…

【C/C++】关键字nullptr详解 | NULL与nullptr的区别

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

AI产业应用再提速,AI基础软件发挥巨擎作用

5月31日&#xff0c;由中国信息通信研究院、中国人工智能产业发展联盟主办&#xff0c;北京九章云极科技有限公司联合主办的【创造智能探索未知】杭州通用人工智能论坛-AI基础软件前沿技术分论坛在杭州成功举办。大会聚焦AI基础软件前沿技术&#xff0c;挖掘人工智能基础软件大…