C#使用Environment.TickCount 自定义的定时器类
2021-03-18 02:26
标签:属性 api framework amp data com 一个 ptime col Environment.TickCount, 官网介绍:一个 32 位带符号整数,它包含自上次启动计算机以来所经过的时间(以毫秒为单位)。 *由于 TickCount 属性值的值是32位有符号整数,因此,如果系统连续运行,TickCount 将从零递增到 Int32.MaxValue 大约24.9 天,然后跳转到 Int32.MinValue,这是一个负数,然后在下一个24.9 天内递增为零。 我们可以通过实时获取系统启动后的毫秒数来实现定时器的定时功能; 首先建立一个Timer类,声明变量如下: 定时器状态如下,初始状态为Idle: 定时器开始启动函数,定时参数为整数,单位ms: 定时器停止函数: 暂停定时器: 继续定时器: 重置定时器: 判断是否超时: 下面在程序中实例化一个Timer类timer1,并实现定时2s发送消息: 看一下定时效果: 因为调用Winform窗台显示,线程执行,逻辑判断等需要一些时间,所以显示有一些偏差; 如官网介绍,使用Environment.TickCount时,注意24.9天左右会达到Int32.MaxValue,然后跳转到Int32.MinValue,再经过24.9天达到0,要注意对负数的处理; C#使用Environment.TickCount 自定义的定时器类 标签:属性 api framework amp data com 一个 ptime col 原文地址:https://www.cnblogs.com/cfsl/p/12372426.html enum_State State;//定时器State
int startTime; //开始时间
int endTime; //结束时间
int interval; //定时间隔
int stopTime; //停止时间
int pauseTime; //暂停时间
bool outMax; //是否超出Int32.MaxValue
enum enum_State
{
_Idle,
_Busy,
_TimeOut,
_Stopped,
_Pause
}
public void Start(int time)
{
if (time 0)
time = 1;
interval = time;
startTime = Environment.TickCount;
endTime = startTime + interval;
State = enum_State._Busy;
stopTime = 0;
pauseTime = 0;
outMax = endTime startTime;
}
public void Stop()
{
if (IsBusy() || IsPause())
stopTime = Environment.TickCount;
State = enum_State._Stopped;
endTime = 0;
pauseTime = 0;
}
public void Pause()
{
if (pauseTime == 0)
pauseTime = Environment.TickCount;
State = enum_State._Pause;
}
public void Resume()
{
if (!IsPause())
return;
int val = pauseTime;
startTime = Environment.TickCount - val;
endTime = startTime + interval;
State = enum_State._Busy;
pauseTime = 0;
stopTime = 0;
outMax = endTime startTime;
}
public void Reset()
{
interval = 0;
startTime = 0;
endTime = 0;
pauseTime = 0;
stopTime = 0;
State = enum_State._Idle;
}
public bool IsTimeOut()
{
int ticks = Environment.TickCount;
if (outMax)
{
if (ticks startTime)
outMax = false;
}
if (!outMax && !IsPause())
{
if (IsBusy() && (ticks > endTime || ticks 0 && endTime > 0 && startTime > 0))
{
stopTime = endTime;
State = enum_State._TimeOut;
}
}
return State == enum_State._TimeOut;
}
public void Monitor()
{
timer1.Start(2*1000);
while (true)
{
Thread.Sleep(10);
//int i = Thread.CurrentThread.ManagedThreadId;
if (timer1.IsTimeOut())
{
comUp.comPort_SendData(textBox_ComSend.Text);
timer1.Start(2*1000);
}
}
}
文章标题:C#使用Environment.TickCount 自定义的定时器类
文章链接:http://soscw.com/index.php/essay/65586.html