vba中有个设置定时器的功能:settimer
我有个疑问是: 如果设置了一个定时器:settimer(2,5000),每5秒执行一个任务。 如果这个任务需要10秒才能结束,这个时候金字塔会出现什么情况呢。
由于vba是单线程的,当一个任务用10秒执行完后,是不是再等5秒执行下一个任务,还是就立即执行下一个任务了。。 金字塔的内部有没有队列维护这些信号? 是否有信号积压的问题??
定时器是基于消息队列的处理模式的,如果是前面执行需要10秒,那么10秒后会立即执行第三次触发的,中间的第二次会被忽略掉
不会影响,定时器在队列中属于优先级较低的那种,如果执行不过来,会丢掉中间一些没有触发的
下午我实际测试了下,一个vba执行需要3秒,但是settimer的时间设置成1秒。
刚开始一切很正常,但是连续跑了20分钟后发现,vba还能执行,但是鼠标点击金字塔菜单栏上的按钮,点击不了,出现了卡住的情况。整个金字塔程序卡住动不了,发单也发不了。
还请检查下原因呢。
VBA是在主线程执行的,你这么搞等于把主线程都给卡死了
按照你之前说的,主线程执行定时器的时候,不是会跳过中间那些等待的信号的么??
怎么会卡死呢。。主线程的处理逻辑还要优化下啊。
而且,定时器本身处理的时间有的时候是不可预测的,这样,定时器的时间间隔就没法设置了。
[此贴子已经被作者于2016/1/22 11:09:41编辑过]
你每秒都去处理需要3秒时间的任务,主线程能不卡死吗?