大佬们帮忙看下,为什么下面循环点运行后就卡死无响应了呢
vb吧
全部回复
仅看楼主
level 6
夜光Music 楼主
Option Explicit
Private Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long) '-----Sleep函数
Private Sub Command1_Click()
Do
Sleep 1000
Debug.Print "测试"
Loop
End Sub
2022年03月15日 17点03分 1
level 6
夜光Music 楼主
中间加了DoEvents不会卡死了,不过还是有点卡,这是怎么回事啊。。要是做成程序中间镶几个循环那程序运行起来不是很慢吗?怎么感觉和按键精灵不太一样啊
2022年03月15日 18点03分 2
level 11
死循环,当然卡死了
2022年03月15日 18点03分 3
加了DoEvents响应了其他消息
2022年03月15日 18点03分
@余思培 嗯,加了就不会卡死了,要不然运行两三次就无响应了,不知道做成exe会不会好点,在编译器调试感觉不太流畅…要是循环里面再来几个循环…………
2022年03月15日 18点03分
@夜光Music 程序是按照顺序执行的,你的代码是死循环(这条线程的控制权始终在这个循环里),加了DoEvents后,就可以跳出循环,处理其他消息(将控制权转移),然后控制权再返回到这里,不知道我这么说你能明白不?
2022年03月15日 23点03分
@余思培 这个明白,理论上加入判断循环条件跳出循环是不是也一样会卡?因为如果不满足跳出循环的话它跟死循环也没区别吧?
2022年03月16日 04点03分
level 13
这种死循环一般程序用不到,而大型游戏时时渲染基本上都会有死循环,不过当游戏退出时会跳出死循环。VB程序是单线程的,Do Loop后线程就堵塞了,一种方法是加DoEvents,当然你也可以创建多线程来解决(VB在多线程上没有优势,就是可以多线程,但是使用要小心,调用某些线程不安全的函数就容易崩掉)
2022年03月16日 00点03分 4
谢谢,理解了
2022年03月16日 04点03分
level 9
得设置条件,什么时候结束循环
2022年03月16日 00点03分 5
level 11
为什么不用timer控件呢,非要这样去处理呢?
2022年03月16日 06点03分 6
以前用的按键精灵,习惯直接用delay来设置延迟,以为这sleep是VB的延迟函数,结果发现好像是线程等待时间[笑眼]让大佬见笑了
2022年03月16日 06点03分
@夜光Music 我倒是实现过不卡界面版的Sleep,但是还更建议优先考虑Timer控件。
2022年03月16日 10点03分
@yjryym 好的,我研究研究
2022年03月16日 15点03分
1