以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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秒时间的任务,主线程能不卡死吗? |