关于“事件”的疑问,详情见问题补充我这里有一个事件每30毫秒触发一次,事件处理程序每执行一次耗时 约为 500毫秒.即正在执行的事件处理程序还未执行完毕,同一事件又触发多次.那么程序
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/27 11:52:59
关于“事件”的疑问,详情见问题补充我这里有一个事件每30毫秒触发一次,事件处理程序每执行一次耗时 约为 500毫秒.即正在执行的事件处理程序还未执行完毕,同一事件又触发多次.那么程序
关于“事件”的疑问,详情见问题补充
我这里有一个事件每30毫秒触发一次,事件处理程序每执行一次耗时 约为 500毫秒.
即正在执行的事件处理程序还未执行完毕,同一事件又触发多次.
那么程序将
1.忽略事件处理程序还未执行完毕期间触发的事件(同一事件),即这段时间的触发无效;
2.还是将 EventArgs 参数缓存起来,等待正在执行的事件处理程序执行完毕后再依次接受缓存 的 EventArgs 参数?
关于“事件”的疑问,详情见问题补充我这里有一个事件每30毫秒触发一次,事件处理程序每执行一次耗时 约为 500毫秒.即正在执行的事件处理程序还未执行完毕,同一事件又触发多次.那么程序
怎么给你说哪?实际上事件响应原理(底层的)是有程序用了setEvent,而另一个程序用了waitForSingleObject,一旦那个用waitForSingleObject得到的返回值是0,他根据if判断语句,自己去调用相应函数.所以实际情况并没有你想的那么自动化.就像一个人等另一个人的来信,如果他不去查信箱,他就永远不会去执行.
所以关键就在于代码是怎么写的,通常的事件响应是有专门一个循环函数在查看事件,事件发生就会调用相应的函数,一旦这个函数运行时间非常长,他就会导致大量的响应没有执行,因为没有人去查信箱.这就是第一种情况,第二种情况也可以完成,但需要由独立的线程去查看信箱,如果执行线程在执行中可以再存这次执行参数,这就需要你自己靠代码实现.大多数软件的可视化窗口的事件响应都是第一种,所以不要在相应事件响应里执行太多的代码,执行时间太长的要发到后台线程执行,否则就会窗口就会卡屏(无法响应任何事件,鼠标是个沙漏或者圈),如果是个无限循环,那很不幸已经死了,程序点X也关不掉,只能到进程列表里关.