当前位置: 代码迷 >> PB >> pb 两个timer怎么能使其不互相影响
  详细解决方案

pb 两个timer怎么能使其不互相影响

热度:157   发布时间:2016-04-29 09:38:25.0
pb 两个timer如何能使其不互相影响
我用pb写的一个程序,里面有两个timer事件,其中都有sleep,有一个的timer是要到设定的时候才可以执行的,现在的情况是timer1执行的时候sleep了,然后就错过了timer2执行的时间,导致timer2不再执行了,有什么方法可以做到这两个不互相影响吗?

------解决方案--------------------
开启多个timer线程

so_timmer mytimmer//变量声明
mytimmer= create so_timmer
mytimmer.of_setparent(this)
mytimmer.of_start(1,"ue_sendreg")//1秒钟后触发以上this中的ue_sendreg()用户事件
mytimmer.stop()//停止timmer

------解决方案--------------------
上华软论坛搜索多timer的例子就可以了,很简单的
------解决方案--------------------
只能这么说,在timer里面不要用sleep,因为timer和你的程序都是一个线程,你一sleep整个程序就都停下来了。
要么用yield()代替sleep()
要么用多线程
要么用个其他程序写个time控件.
------解决方案--------------------
避免使用sleep,PB就一个线程,sleep整个程序都停了。

用timer(0.1),再设置2个计数变量

假设timer1需要60秒执行一次,那么60/0.1 = 600,在此timer中,每触发一次就将计数器加1,当计数器达到600时执行相应代码,否则什么也不做。

timer2同上处理,根据计数判断是否执行相应代码。

另外,处理的代码可以考虑写成可调用的函数,当需要执行代码时,用POST方式去调用。
------解决方案--------------------
一、pb的sleep会导致主线程停下来,导致假死机现象;
二、可以扩充timing对象实现多个timer事件,以不同的频率触发;
三、的timer事件是不可靠的,程序忙的话经常会出现丢失的现象,如果要求高的话需要用api去实现,
FUNCTION ulong SetTimer(ulong hWnd,ulong nIDEvent,ulong uElapse,,ulong lpTimerFunc) LIBRARY "user32.dll"
  相关解决方案