以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  有关vba定时器功能的疑问。  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=90562)

--  作者:bage
--  发布时间:2016/1/21 14:06:08
--  有关vba定时器功能的疑问。
vba中有个设置定时器的功能:settimer

我有个疑问是: 如果设置了一个定时器:settimer(2,5000),每5秒执行一个任务。 如果这个任务需要10秒才能结束,这个时候金字塔会出现什么情况呢。

由于vba是单线程的,当一个任务用10秒执行完后,是不是再等5秒执行下一个任务,还是就立即执行下一个任务了。。 金字塔的内部有没有队列维护这些信号? 是否有信号积压的问题??

--  作者:王锋
--  发布时间:2016/1/21 14:10:50
--  

定时器是基于消息队列的处理模式的,如果是前面执行需要10秒,那么10秒后会立即执行第三次触发的,中间的第二次会被忽略掉


--  作者:bage
--  发布时间:2016/1/21 14:42:53
--  
我想问的是:

这种信号的积压,会不会对金字塔进程有影响呢

--  作者:王锋
--  发布时间:2016/1/21 14:53:11
--  
不会影响,定时器在队列中属于优先级较低的那种,如果执行不过来,会丢掉中间一些没有触发的
--  作者:bage
--  发布时间:2016/1/21 15:27:23
--  
下午我实际测试了下,一个vba执行需要3秒,但是settimer的时间设置成1秒。

刚开始一切很正常,但是连续跑了20分钟后发现,vba还能执行,但是鼠标点击金字塔菜单栏上的按钮,点击不了,出现了卡住的情况。整个金字塔程序卡住动不了,发单也发不了。

还请检查下原因呢。

--  作者:王锋
--  发布时间:2016/1/21 15:41:14
--  
VBA是在主线程执行的,你这么搞等于把主线程都给卡死了
--  作者:bage
--  发布时间:2016/1/22 11:08:14
--  
按照你之前说的,主线程执行定时器的时候,不是会跳过中间那些等待的信号的么??

怎么会卡死呢。。主线程的处理逻辑还要优化下啊。

而且,定时器本身处理的时间有的时候是不可预测的,这样,定时器的时间间隔就没法设置了。
[此贴子已经被作者于2016/1/22 11:09:41编辑过]

--  作者:王锋
--  发布时间:2016/1/22 12:23:12
--  

你每秒都去处理需要3秒时间的任务,主线程能不卡死吗?