C++Builder 动态生成定时器,创建定时器管理类
2016-12-16 14:44
246 查看
定时器是做客户端时常用的一类控件,只需要设置定时时间,开启定时器,然后创建定时事件响应函数,就能定时执行特定的功能,用起来很方便。当时当工程比较大,定时器比较多时,界面看起来就会比较混乱,当定时器名字起的不够直观时,管理起来比较困难。因此,我打算建立一个定时器管理类,对所有定时器统一管理。动态创建一个定时器实例的方法比较简单:
TTimer *tmr= new TTimer(this);(注意new时带参数)
但是,怎么创建事件相应函数呢,通过控件我们可以直接双击控件,直接填写定时功能代码就可以了,但是动态创建不能这样做。我首先想到的是,可不可以通过一个判断条件,执行事件响应函数,在这个过程中我发现了OnTimer属性,通过看它的定义,我发现这个属性是可读写的,类型是函数指针类型TNotifyEvent,那么是不是可以自定义一个TNotifyEvent类型函数,然后赋值给OnTimer作为定时器事件响应函数呢?经过尝试发现是可以的:
.h文件
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <boost/shared_ptr.hpp>
using namespace boost;
//---------------------------------------------------------------------------
class TTimerManage : public TForm
{
__published:
private:
shared_ptr<TTimer> tmrUpDateDB;
void __fastcall OnTmrUpDateDB(TObject *Sender);
public:
__fastcall TTimerManage(TComponent* Owner);
void __fastcall TmrUpDateDB(double time, bool repeat);
};
//---------------------------------------------------------------------------
extern PACKAGE TTimerManage *TimerManage;
extern shared_ptr<TTimerManage> g_timerupdate;
.cpp文件
shared_ptr<TTimerManage> g_timerupdate(new TTimerManage(NULL));
TTimerManage *TimerManage;
__fastcall TTimerManage::TTimerManage(TComponent* Owner)
: TForm(Owner)
{
tmrUpDateDB.reset(new TTimer(this));
}
//---------------------------------------------------------------------------
void __fastcall TTimerManage::OnTmrUpDateDB(TObject *Sender)
{
tmrUpDateDB->Enabled = false; //——————————————1
ShowMessage("aaaaa");
}
void __fastcall TTimerManage::TmrUpDateDB(double time, bool repeat)
{
tmrUpDateDB->Interval = time;
tmrUpDateDB->OnTimer = OnTmrUpDateDB;
}
需要使用的定时器都在该单元中定义好,在外部使用时只要g_timerupdate->TmrUpDateDB(2000,false);就可以使用,其中第二个参数可以用于一些条件的判断,如是否循环执行。在实现过程中发现,当需要定时器事件只执行一次时,需要在showmessage前,关闭定时器,如果在之后关闭定时器,定时事件不执行。智能指针的声明和定义和普通变量同样有作用范围如果在一个函数内声明,作用范围就是这个函数,函数执行完释放指针。
TTimer *tmr= new TTimer(this);(注意new时带参数)
但是,怎么创建事件相应函数呢,通过控件我们可以直接双击控件,直接填写定时功能代码就可以了,但是动态创建不能这样做。我首先想到的是,可不可以通过一个判断条件,执行事件响应函数,在这个过程中我发现了OnTimer属性,通过看它的定义,我发现这个属性是可读写的,类型是函数指针类型TNotifyEvent,那么是不是可以自定义一个TNotifyEvent类型函数,然后赋值给OnTimer作为定时器事件响应函数呢?经过尝试发现是可以的:
.h文件
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <boost/shared_ptr.hpp>
using namespace boost;
//---------------------------------------------------------------------------
class TTimerManage : public TForm
{
__published:
private:
shared_ptr<TTimer> tmrUpDateDB;
void __fastcall OnTmrUpDateDB(TObject *Sender);
public:
__fastcall TTimerManage(TComponent* Owner);
void __fastcall TmrUpDateDB(double time, bool repeat);
};
//---------------------------------------------------------------------------
extern PACKAGE TTimerManage *TimerManage;
extern shared_ptr<TTimerManage> g_timerupdate;
.cpp文件
shared_ptr<TTimerManage> g_timerupdate(new TTimerManage(NULL));
TTimerManage *TimerManage;
__fastcall TTimerManage::TTimerManage(TComponent* Owner)
: TForm(Owner)
{
tmrUpDateDB.reset(new TTimer(this));
}
//---------------------------------------------------------------------------
void __fastcall TTimerManage::OnTmrUpDateDB(TObject *Sender)
{
tmrUpDateDB->Enabled = false; //——————————————1
ShowMessage("aaaaa");
}
void __fastcall TTimerManage::TmrUpDateDB(double time, bool repeat)
{
tmrUpDateDB->Interval = time;
tmrUpDateDB->OnTimer = OnTmrUpDateDB;
}
需要使用的定时器都在该单元中定义好,在外部使用时只要g_timerupdate->TmrUpDateDB(2000,false);就可以使用,其中第二个参数可以用于一些条件的判断,如是否循环执行。在实现过程中发现,当需要定时器事件只执行一次时,需要在showmessage前,关闭定时器,如果在之后关闭定时器,定时事件不执行。智能指针的声明和定义和普通变量同样有作用范围如果在一个函数内声明,作用范围就是这个函数,函数执行完释放指针。
相关文章推荐
- 动态创建服务器控件,获取HTML输出(用于生成静态文件,简化页面,简化编程等)
- 动态创建服务器控件,获取HTML输出(用于生成静态文件,简化页面,简化编程等)
- 动态创建表格,动态换行 生成新的TR
- 利用Java反射机制和Javassist实现Java对象及其属性的动态创建生成
- JS创建HTML控件并动态生成页面的写法
- 编写S-Function,创建Simulink模型并生成C++代码,编译生成可调用的动态库dll(From Simulink model to DLL A tutorial)
- 从 Java 应用程序动态生成 PDF 文件一个简化了 PDF 创建过程的开源库 iText 的分步指南
- MFC中创建动态控件的生成与响应
- 在MFC中创建动态控件的生成与响应
- c++builder 动态创建控件及销毁
- 在MFC中创建动态控件的生成与响应
- 在MFC中创建动态控件的生成与响应
- [转载]在MFC中创建动态控件的生成与响应[转]
- Oracle动态创建序列和触发器生成键
- 在MFC中创建动态控件的生成与响应
- 在C++Builder中动态创建控件
- 动态创建服务器控件,获取HTML输出(用于生成静态文件,简化页面,简化编程等)
- MFC工具栏动态创建Slider并生成消息响应
- 1.输入一个数组长度,动态创建数组,所有元素随机生成,输出元素中的最大值;
- 在C++Builder中动态创建控件并处理添加事件处理