time(0)是什么用法

时间:2022-01-31 02:44:14
看别人写的pb7脚本里有time(0)这么一句,用于定时控制的,但看pb7的帮助文档没有这样的用法,请大虾指点

17 个解决方案

#1


停止timer事件,这种问题自己运行一下就出来的就不要问了

#2


是timer(0),
以下是pb9.0的help.

Timer ( interval {, windowname } )

Argument Description
interval The number of seconds that you want between Timer events. interval can be a whole number or fraction greater than 0 and less than or equal to 4,294,967 seconds. If interval is 0, Timer turns off the timer so that it no longer triggers Timer events.
windowname (optional) The window in which you want the timer event to be triggered. The window must be an open window. If you do not specify a window, the Timer event occurs in the current window.

#3


to tyllen(浪里打滚)

我知道timer(0)是停止timer事件,time(0)也是吗?pb7的帮助文档里并不是这样描述的,没有time(0)这种用法,但编译可以通过

#4


没见过,也许是自定义函数

#5


返回00:00:00

#6


这倒是头次看到的用法,测试了一下!发现:这种情况非常类似于 C 的强制类型转换!

pb 的标准(静态)数据类型大致分为三大类型:字符,数字,时间,除去 boolean 和 blob 不支持这样的强制转换外,其它的类型都可以(但无符号数字的不行,如 uint,另外 int 也不行,必须是 integer);语法上这些标准数据类型可以转换任何类型,但实际上只是有意义的转换才能成功,象 time(0) 这种就不存在转换的可能!转不了时就会返回一些默认值,如字符返回空字符,数字返回零,时间返回 00:00:00 等...如此而已

#7


琢磨了源码半天,发现这个time(0)在定时控制中还是很有用的,可以用来编一个时钟或自动无限次触发timer事件,源码如下:
在窗口中放一个editmask控件(名字为em_time),格式为yyyy-mm-dd hh:mm:ss
在窗口open事件中写入下面代码:
em_time.text = String(today(),"yyyy-mm-dd ") + String(now(),"hh:mm:ss")
timer(1)
time(0)    //立即触发timer事件,相当于每秒触发一次timer事件

在timer事件中写入:
time lt_now
lt_now = now()
em_time.text = String(today(),"yyyy-mm-dd ") + String(lt_now,"hh:mm:ss")

这样就可以在窗口中实时显示当前系统的时间了

#8


楼主还是没弄清楚!单独的一行代码 time(0) 根本没有任何意义,就象单独的 string(0),long(0) 一样,只是浪费 cpu 的时间的而已!如果是想要立即触发定时器,应写成:

em_time.text = ... // 这行可以省了
timer(1)
this.TriggerEvent(timer!)

#9


timer(1)表示每隔一秒执行触发一次timer()事件!timer是个事件,可以查手册看看!

#10


timer(0)是关闭定时器,即不再触发timer事件中的脚本

#11


关闭定时器

#12


长见识了,刚才试了试
同意msgtogcra() 的观点,time()函数,无论给他什么参数(任意一个整数),均返回00:00:00,也就是0点整,而date()函数,则返回1900-01-01,这是pb所能表达的最小的日期

#13


原来是讨论time(0),我搞错了,以为是timer(0)

time(0)跟定时器有关系?

#14


to msgtogcra() ,我的本意不是立即触发定时器,或者说不是要只立即触发一次。

用this.TriggerEvent(timer!)只能让timer事件触发一次吧(看代码应该是这样,偶没试过)。
我的本意是想让系统无限次自动触发timer事件,用time(0)可以实现这一点。按照我给的代码,观测em_time,会发现它里面显示的秒数会自动隔一秒刷新一次的,但如果去掉time(0),则不会。

呵呵,这里讨论的是time(0),不是timer(0)

#15


只要写了 timer(1),自然就会无限次触发了,除非再用 timer(0) 关闭否则不会停止,楼主既然明白 timer(0) 是关闭定时器,怎么会想不明白这点呢??

我就是用你贴的代码试的,去掉 time(0) 一点问题也没有!如果你的 pb 能让 time(0) 有这种功能,真该是一大奇闻了!

#16


停止timer事件

#17


原来是我调试时搞错了,呵呵

#1


停止timer事件,这种问题自己运行一下就出来的就不要问了

#2


是timer(0),
以下是pb9.0的help.

Timer ( interval {, windowname } )

Argument Description
interval The number of seconds that you want between Timer events. interval can be a whole number or fraction greater than 0 and less than or equal to 4,294,967 seconds. If interval is 0, Timer turns off the timer so that it no longer triggers Timer events.
windowname (optional) The window in which you want the timer event to be triggered. The window must be an open window. If you do not specify a window, the Timer event occurs in the current window.

#3


to tyllen(浪里打滚)

我知道timer(0)是停止timer事件,time(0)也是吗?pb7的帮助文档里并不是这样描述的,没有time(0)这种用法,但编译可以通过

#4


没见过,也许是自定义函数

#5


返回00:00:00

#6


这倒是头次看到的用法,测试了一下!发现:这种情况非常类似于 C 的强制类型转换!

pb 的标准(静态)数据类型大致分为三大类型:字符,数字,时间,除去 boolean 和 blob 不支持这样的强制转换外,其它的类型都可以(但无符号数字的不行,如 uint,另外 int 也不行,必须是 integer);语法上这些标准数据类型可以转换任何类型,但实际上只是有意义的转换才能成功,象 time(0) 这种就不存在转换的可能!转不了时就会返回一些默认值,如字符返回空字符,数字返回零,时间返回 00:00:00 等...如此而已

#7


琢磨了源码半天,发现这个time(0)在定时控制中还是很有用的,可以用来编一个时钟或自动无限次触发timer事件,源码如下:
在窗口中放一个editmask控件(名字为em_time),格式为yyyy-mm-dd hh:mm:ss
在窗口open事件中写入下面代码:
em_time.text = String(today(),"yyyy-mm-dd ") + String(now(),"hh:mm:ss")
timer(1)
time(0)    //立即触发timer事件,相当于每秒触发一次timer事件

在timer事件中写入:
time lt_now
lt_now = now()
em_time.text = String(today(),"yyyy-mm-dd ") + String(lt_now,"hh:mm:ss")

这样就可以在窗口中实时显示当前系统的时间了

#8


楼主还是没弄清楚!单独的一行代码 time(0) 根本没有任何意义,就象单独的 string(0),long(0) 一样,只是浪费 cpu 的时间的而已!如果是想要立即触发定时器,应写成:

em_time.text = ... // 这行可以省了
timer(1)
this.TriggerEvent(timer!)

#9


timer(1)表示每隔一秒执行触发一次timer()事件!timer是个事件,可以查手册看看!

#10


timer(0)是关闭定时器,即不再触发timer事件中的脚本

#11


关闭定时器

#12


长见识了,刚才试了试
同意msgtogcra() 的观点,time()函数,无论给他什么参数(任意一个整数),均返回00:00:00,也就是0点整,而date()函数,则返回1900-01-01,这是pb所能表达的最小的日期

#13


原来是讨论time(0),我搞错了,以为是timer(0)

time(0)跟定时器有关系?

#14


to msgtogcra() ,我的本意不是立即触发定时器,或者说不是要只立即触发一次。

用this.TriggerEvent(timer!)只能让timer事件触发一次吧(看代码应该是这样,偶没试过)。
我的本意是想让系统无限次自动触发timer事件,用time(0)可以实现这一点。按照我给的代码,观测em_time,会发现它里面显示的秒数会自动隔一秒刷新一次的,但如果去掉time(0),则不会。

呵呵,这里讨论的是time(0),不是timer(0)

#15


只要写了 timer(1),自然就会无限次触发了,除非再用 timer(0) 关闭否则不会停止,楼主既然明白 timer(0) 是关闭定时器,怎么会想不明白这点呢??

我就是用你贴的代码试的,去掉 time(0) 一点问题也没有!如果你的 pb 能让 time(0) 有这种功能,真该是一大奇闻了!

#16


停止timer事件

#17


原来是我调试时搞错了,呵呵