我想问一下doevents的用法

itcoco 2003-10-17 06:06:24
我想问一下doevents的用法 也知道他是和操作系统控制权有关 但还是不太理解
现在贴了关于他的一些代码请大家给我讲解以下
Private Sub Form_Load()

fileName = "c:\IPDetail.txt"

Shell "command.com /c ipconfig.exe > " & fileName
DoEvents

Do While Trim(Dir(fileName)) = ""
DoEvents
Loop

End Sub
...全文
78 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
aha99 2003-10-19
  • 打赏
  • 举报
回复
TO:zyl910(910:分儿,我又来了!)
谢谢指点,确实是这样的,只是该程序停止响应消息处理,而不是整个系统。
buffaloes 2003-10-18
  • 打赏
  • 举报
回复
严重同意楼上说的.其实更简单一点的描述是:

让系统立即执行doevents前面的代码.这一点是我在作winsock编程时得来的深刻体会.
zyl910 2003-10-18
  • 打赏
  • 举报
回复
看来楼上的都不明白 系统 与 线程 的 区别

线程有两种:UI线程 和 工作线程。他们的区别在于 UI线程 建立了消息循环,能够把消息(主要是 键盘、鼠标、投递、刷新、时间 消息)发送到窗口

VB的事件只是对Windows的封装,Load事件发生在窗口刚刚建立的时候
此时窗口还没有刷新,所以看不到窗口
如果你不加DoEvents的话,该线程会一直停在Form_Load过程中,不能回到消息循环继续发送消息
这就像死机了一样。但“死”的只是这个线程,而不是Windows操作系统

而DoEvents的作用只是处理自身线程的积压消息,而不是释放CPU控制权给其他线程
所以就算加了DoEvents,CPU的占用率还是100%

真正 释放CPU控制权 的是Sleep函数(API)
aha99 2003-10-18
  • 打赏
  • 举报
回复
楼上的说得对,其实就是释放控制权,让系统处理下面的东西,否则的话,系统一直在忙你的操作。如果你的操作有延迟,那样的话系统就暂时会停止响应其他的消息,直到你的操作完成。如果上面的例子没有 DoEvents ,就会一直do while ,文件出来之前就 和死机一样
tanta 2003-10-17
  • 打赏
  • 举报
回复
呵呵,楼上写错了,应该是程序将一直执行到文件名为:filename的文件存在为止!
实际上就是要确保外部程序执行完毕。
请看:

Private Sub Form_Load()

fileName = "c:\IPDetail.txt"

Shell "command.com /c ipconfig.exe > " & fileName ‘ 执行外部命令
DoEvents

Do While Trim(Dir(fileName)) = "" 如果文件不存在,循环
DoEvents
Loop
End Sub
海牛 2003-10-17
  • 打赏
  • 举报
回复
程序将一直执行到文件名为:filename的文件不存在为止!
zyl910 2003-10-17
  • 打赏
  • 举报
回复
doevents的作用只是:处理自身线程的积压消息


所谓的“和操作系统控制权有关”只是那些专业人员认为 这样说比较好理解
itcoco 2003-10-17
  • 打赏
  • 举报
回复
up

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧