(20)uniGUI for C++ builder下如何使用UniTimer控件实现定时动作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dlboy2018/article/details/81879226

       (中行雷威2018.8.12)

(同一个世界,同一个梦想,交流学习C++Builder XE10,传承c++builder的魅力!欢迎各地朋友加入我的QQ群484979943,进群密码“BCB”,同时也请将该群号广为宣传,希望能够广集各方高手,共同进步。如需下载开发工具及源代码请加入我的QQ群。)

【阅读倡议】

1、有问题请留言;

2、没问题请点赞;

3、看连载请加群;

4、下源码请加群;

【开发工具】

1、C++Builder10.2.3tokyo

2、FMSoft_uniGUI_Complete_Professional_1.10.0build1472(正版)

本例子将详细讲解如何使用定时器、计时器timer控件。uniGUI的timer控件有两个一个是UniTimer,主要用于浏览器端计时动作,另一个是UniThreadTimer,主要用户后台服务端计时动作。本教程的源代码请到我的QQ群共享文件A02-源代码里下载。

一、UniTimer客户端案例

在客户端窗口MainForm上摆放一个UniMemo控件用于显示当前时间以表示计时器的自动操作,一个UniTimer用于自动控制,UniTimer还有一个RunOnce属性(只运行一次),再放一个UniCheckBox来演示只运行一次。放两个按钮,分别启动计时器和停止计时器。(第三个和第四个按钮是服务端案例使用)

1、Main.cpp

//---------------------------------------------------------------------------
#include <vcl.h>
#include <uniGUIVars.hpp>
#pragma hdrstop

#include "Main.h"
#include "MainModule.h"
#include "ServerModule.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "uniBitBtn"
#pragma link "uniButton"
#pragma link "uniGUIBaseClasses"
#pragma link "uniGUIClasses"
#pragma link "uniMemo"
#pragma link "uniTimer"
#pragma link "uniCheckBox"
#pragma resource "*.dfm"
//---------------------------------------------------------------------------
TMainForm *MainForm(void)
{
   return( (TMainForm *)UniMainModule()->GetFormInstance(__classid(TMainForm)));
}
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
        : TUniForm(Owner)
{
}
//---------------------------------------------------------------------------
void TF3D06BF53C86454A8B2F94A3BC87922B__RegisterFormClass() {
  Uniguivars::RegisterAppFormClass(__classid(TMainForm));
  Uniguiregclasses::CPPInit();
}

#pragma startup TF3D06BF53C86454A8B2F94A3BC87922B__RegisterFormClass
void __fastcall TMainForm::UniBitBtn1Click(TObject *Sender)
{
//设置间隔时间(毫秒)
UniTimer1->Interval=3000;
//只运行一次
if(UniCheckBox1->Checked)
    UniTimer1->RunOnce=true;
else
    UniTimer1->RunOnce=false;
//设置启动状态
UniTimer1->Enabled=true;

}
//---------------------------------------------------------------------------
void __fastcall TMainForm::UniTimer1Timer(TObject *Sender)
{
//添加当前系统时间
UniMemo1->Lines->Add(Now());

}
//---------------------------------------------------------------------------
void __fastcall TMainForm::UniBitBtn2Click(TObject *Sender)
{
//设置关闭状态
UniTimer1->Enabled=false;
}
//---------------------------------------------------------------------------
2、运行演示

运行后访问http://127.0.0.1:8077,点击开始按钮后,左侧每3秒会添加一行当前时间,如果勾选了“只运行一次”你会发现开始后只添加一次当前时间。

二、UniThreadTimer服务端案例

在ServerModule上昂一个UniThreadTimer控件,在MainForm上放两个按钮(第三、第四个)用于启动后台的服务,本案例让计时器自动删除服务端的一个文件,文件D:\testTimer\Win32\Debug\files\a.txt

1、ServerModule.h

//---------------------------------------------------------------------------

#ifndef ServerModuleH
#define ServerModuleH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <uniGUIServer.hpp>
#include "uniThreadTimer.hpp"
//---------------------------------------------------------------------------
class TUniServerModule : public TUniGUIServerModule
{
__published:    // IDE-managed Components
    TUniThreadTimer *UniThreadTimer1;
    void __fastcall UniThreadTimer1Timer(TObject *Sender);
private:    // User declarations
public:        // User declarations
    String startFlag;//定义启动停止标志

    __fastcall TUniServerModule(TComponent* Owner);
    virtual void __fastcall FirstInit(void);

};
//---------------------------------------------------------------------------
TUniServerModule *UniServerModule(void);
//---------------------------------------------------------------------------
#endif

2、ServerModule.cpp

//---------------------------------------------------------------------------

#include <vcl.h>
#include <UniGUIVars.hpp>

#pragma hdrstop

#include "ServerModule.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "uniThreadTimer"
#pragma resource "*.dfm"
//---------------------------------------------------------------------------
TUniServerModule *UniServerModule(void)
{
   return( (TUniServerModule *)UniGUIServerInstance() );
}
//---------------------------------------------------------------------------

__fastcall TUniServerModule::TUniServerModule(TComponent* Owner)
        : TUniGUIServerModule(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TUniServerModule::FirstInit()
{
  Uniguivars::InitServerModule(this);
}
//---------------------------------------------------------------------------

void __RegisterServerModuleClass() {
  Uniguivars::RegisterServerModuleClass(__classid(TUniServerModule));
}

#pragma startup __RegisterServerModuleClass
void __fastcall TUniServerModule::UniThreadTimer1Timer(TObject *Sender)
{
char fileA[100];
String file1=UniServerModule()->FilesFolderPath+"a.txt";
sprintf(fileA,"%s",file1);

if(startFlag=="1")
    DeleteFile(file1);

}
//-----

3、Main.cpp

//---------------------------------------------------------------------------
#include <vcl.h>
#include <uniGUIVars.hpp>
#pragma hdrstop

#include "Main.h"
#include "MainModule.h"
#include "ServerModule.h"   //引用ServerModule的startFlag变量
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "uniBitBtn"
#pragma link "uniButton"
#pragma link "uniGUIBaseClasses"
#pragma link "uniGUIClasses"
#pragma link "uniMemo"
#pragma link "uniTimer"
#pragma link "uniCheckBox"
#pragma resource "*.dfm"
//---------------------------------------------------------------------------
TMainForm *MainForm(void)
{
   return( (TMainForm *)UniMainModule()->GetFormInstance(__classid(TMainForm)));
}
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
        : TUniForm(Owner)
{
}
//---------------------------------------------------------------------------
void TF3D06BF53C86454A8B2F94A3BC87922B__RegisterFormClass() {
  Uniguivars::RegisterAppFormClass(__classid(TMainForm));
  Uniguiregclasses::CPPInit();
}

#pragma startup TF3D06BF53C86454A8B2F94A3BC87922B__RegisterFormClass

//---------------------------------------------------------------------------
void __fastcall TMainForm::UniBitBtn3Click(TObject *Sender)
{
//开启后台服务删除开关
UniServerModule()->startFlag="1";

}
//---------------------------------------------------------------------------
void __fastcall TMainForm::UniBitBtn4Click(TObject *Sender)
{
//关闭后台服务删除开关
UniServerModule()->startFlag="0";

}
//---------------------------------------------------------------------------

运行后访问http://127.0.0.1:8077,点击“开始后台删除”后系统会每隔一秒就去D:\testTimer\Win32\Debug\files目录下删除一次a.txt文件。你随意编辑一个a.txt文件放上去,一会儿就不见了。

猜你喜欢

转载自blog.csdn.net/dlboy2018/article/details/81879226
今日推荐