|
比如, 时钟周期设置为1秒执行一次, 但是在时钟事件里执行的代码需要3秒才能执行完
于是就有了这么一个讨论
先看下面一段代码
窗口程序集名 | 保 留 | 保 留 | 备 注 | 窗口程序集_启动窗口 | | | | 变量名 | 类 型 | 数组 | 备 注 | 程序集_卡线程 | 逻辑型 | | 判断 (选择框1.选中 )SetTimer (取窗口句柄 (), 10, 1000, 到整数 (&时钟_周期事件 )) KillTimer (取窗口句柄 (), 10 )调试输出 (“开启时钟, 开启时钟的线程ID = ”, GetCurrentThreadId ())调试输出 (“进入时钟事件, 当前线程ID = ”, GetCurrentThreadId ()) 判断 (程序集_卡线程 )Sleep (3000 ) 程序_延时 (3000 ) 调试输出 (“退出时钟事件, 当前线程ID = ”, GetCurrentThreadId ())
先不要去易语言里执行这段代码, 用脑子自己感觉一下
如果把 程序集_卡线程 这个变量改为真, 那么时钟的输出是怎样的?
如果把 程序集_卡线程 这个变量改为假, 那时钟的输出又是怎样的?
因为时钟周期是1秒, 但是在时钟事件里需要3秒才能执行完
那么问题就来了
1. 在时钟事件还没执行完毕的时候, 下一个时钟周期会调用时钟事件吗?
2. 程序集_卡线程 这个变量为真 和为 假 , 输出会有区别吗?
是会输出 进入, 退出, 进入, 退出....
还是输出 进入, 进入, 进入, 退出, 进入, 退出, 进入, 退出, 退出, 退出
还是输出 进入, 进入, 进入, 退出, 退出, 退出
谁又知道是什么原理吗?
时钟周期内, 如果没有执行完下一个时钟周期又来了的话, 分两种情况
①. 有处理消息
有处理消息的话, 那时钟内的事件没执行完就会触发下一个时钟周期
因为时钟基于窗口消息, 有处理消息就会有触发时钟
②. 没有处理消息
没有处理消息的话, 那会一直把时钟内的事件执行完, 然后再触发下一次时钟
上面说了, 时钟基于窗口消息, 窗口没有处理消息就不会有时钟事件
|
|