关于VB Timer运行的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于VB Timer运行的问题相关的知识,希望对你有一定的参考价值。
关于timer控件,有个疑问。
举例来说,我把interval设为1,那么timer事件的执行周期是多少?
如果我在timer事件中放入了很多代码,完整地执行一次需要很长时间,比如说是10s,而interval设置为1000(1s)或者更低,那么,timer事件是先执行完我的代码之后再进入下一次timer还是到时间之后(1s)直接执行下一次timer事件?
我在运行程序时,不管机器的cpu有多高,程序一直占用99%的cpu资源,这是不是和timer的interval太小有关?
第二个问题:timer事件在本质上是一个过程(sub),而过程的一个特点是,本次执行未完成时,若再执行一个实例,本次实例就会暂停,直到新的实例执行完毕,旧的实例才会继续执行。也就是说,先执行后完成。由于是不同的实例,所以互不干扰,不会出现错误。
正是因为如此,timer过程就相当于一个没有限制条件的递归,很容易就会使CPU占用很高。 参考技术A Private Sub Timer1_Timer()
Timer1.Enabled = False '触发后首先关闭等待
'这里写你的代码
Timer1.Enabled = True '系统运行完成后再打开等待
End Sub 参考技术B timer控件的运行原理是:
当系统间隔时间到来时,触发一次timer事件。当事件内的代码执行完毕后,再等待下一间隔时间的到来。。。由此循环下去。
系统间隔时间的设置通过interval来进行,以毫秒为单位,数值越小,则事件的触发频率就越快,反之,数值越大,则事件的触发频率就越慢。如果你把nterval设为1,则事件触发周期为1毫秒,相当快了。 参考技术C 设置为1就是1毫秒。等待1毫秒。
当执行完你的代码后。等待1S,然后再执行下一次timer。执行完成后,再等待1S执行下一次。就是说,不论你的程序能执行多长时间。你的timer是一个间隔,执行完你的代码后的一个间隔时间。每次执行间隔多少时间。跟你的代码执行时间没关系。
我做的一个倒计时的程序。3个按钮。一个timer控件,3个lb。你把 Timer1.Interval 的值设置大一点就能看出效果
Public n As Integer
Private Sub Command1_Click()
Timer1.Enabled = False
End Sub
Private Sub Command2_Click()
Timer1.Enabled = True
End Sub
Private Sub Command3_Click()
Timer1.Enabled = False
Unload Form1
End Sub
Private Sub Form_Load()
n = 20
Timer1.Interval = 1000
'time.Caption = n
End Sub
Private Sub Timer1_Timer()
time.Caption = n
If n >= 1 Then
n = n - 1
Else
t& = ExitWindowsEx(EWX_LOGOFF, 0)
Timer1.Enabled = False
End If
End Sub
希望能帮到你。 参考技术D 其实Interval属性值只是一个参考值,其准确性低,因而间隔不一定准确。Timer控件是基于Windows消息WM_TIME的时钟脉冲发生器,系统每秒生成18个时钟信号,所以即使用毫秒衡量Interval属性,间隔的实际精度不会超过1/18秒,换句话说,Timer控件能够精确设置的最短时间是65.6毫秒,如果要使时间间隔更精确,应让定时器检查系统时钟。 第5个回答 2008-10-05 属性的一项就是timer多久执行一次 以毫秒计算1000就是一秒
你设为1的话 就是0.001秒执行一次
例如的设属性是1000
timer里的代码是
label1.caption = date
ens sub
就是隔1秒就变动一次label1.caption
如果timer里代码太多也不会是什魔问题
里面的代码都是同步执行的
也就是说如果timer里有100个对像要执行
属性设为100的话 就是0.1秒执行一次那100个对像
不过电脑性能不好的话 有可能出错或死机是现像
关于C#中timer类
·关于C#中timer类 在C#里关于定时器类就有3个
1.定义在System.Windows.Forms里
2.定义在System.Threading.Timer类里
3.定义在System.Timers.Timer类里
System.Windows.Forms.Timer是应用于WinForm中的,它是通过Windows消息机制实现的,类似于VB或Delphi中的Timer控件,内部使用API SetTimer实现的。它的主要缺点是计时不精确,而且必须有消息循环,Console Application(控制台应用程序)无法使用。
System.Timers.Timer和System.Threading.Timer非常类似,它们是通过.NET Thread Pool实现的,轻量,计时精确,对应用程序、消息没有特别的要求。System.Timers.Timer还可以应用于WinForm,完全取代上面的Timer控件。它们的缺点是不支持直接的拖放,需要手工编码。
例1:
使用System.Timers.Timer类
System.Timers.Timer t = new System.Timers.Timer(10000);//实例化Timer类,设置间隔时间为10000毫秒;
t.Elapsed += new System.Timers.ElapsedEventHandler(theout);//到达时间的时候执行事件;
t.AutoReset = true;//设置是执行一次(false)还是一直执行(true);
t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;
public void theout(object source, System.Timers.ElapsedEventArgs e)
{
MessageBox.Show("OK!");
}
例2:System.Threading.Timer类的TimerCallback 委托
System.Threading.Timer 是一个使用回调方法的计时器,而且由线程池线程服务,简单且对资源要求不高。
只要在使用 Timer,就必须保留对它的引用。对于任何托管对象,如果没有对 Timer 的引用,计时器会被垃圾回收。即使 Timer 仍处在活动状态,也会被回收。当不再需要计时器时,请使用 Dispose 方法释放计时器持有的资源。
使用 TimerCallback 委托指定希望 Timer 执行的方法。计时器委托在构造计时器时指定,并且不能更改。此方法不在创建计时器的线程中执行,而是在系统提供的线程池线程中执行。
创建计时器时,可以指定在第一次执行方法之前等待的时间量(截止时间)以及此后的执行期间等待的时间量(时间周期)。可以使用 Change 方法更改这些值或禁用计时器。
Demo application:
应用场景:在windows form程序自动执行某项工作后,希望其windows form能够自动关闭。
代码设计:
(1)首先声明Timer变量:private System.Threading.Timer timerClose;
(2)在上述自动执行代码后面添加如下Timer实例化代码:
// Create a timer thread and start it
timerClose = new System.Threading.Timer(new TimerCallback(timerCall), this, 5000, 0);
Timer构造函数参数说明:
Callback:一个 TimerCallback 委托,表示要执行的方法。
State:一个包含回调方法要使用的信息的对象,或者为空引用(Visual Basic 中为 Nothing)。
dueTime:调用 callback 之前延迟的时间量(以毫秒为单位)。指定 Timeout.Infinite 以防止计时器开始计时。指定零 (0) 以立即启动计时器。
Period:调用 callback 的时间间隔(以毫秒为单位)。指定 Timeout.Infinite 可以禁用定期终止。
(3)定义TimerCallback委托要执行的方法:
private void timerCall(object obj)
{
timerClose.Dispose();
this.Close();
}
当然,除了使用上述System.Threading.Timer类的TimerCallback 委托机制外,应该还有很多其他的办法。另外,这里只是demo了TimerCallback委托的简单应用。
以上是关于关于VB Timer运行的问题的主要内容,如果未能解决你的问题,请参考以下文章