首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • DoEvents函数 '转让控制权
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ynumiengZHANGYAMING
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-08-07 23:33:35 楼主
    DoEvents函数是用于转让控制权的.但我对它不太清楚.谁能举例说明它的用法.谢谢!
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ChinaOBS
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 3

      7

    发表于:2008-08-08 08:07:541楼 得分:0
    DoEvents 函数
         

    转让控制权,以便让操作系统处理其它的事件。

    语法

    DoEvents( )

    说明

    DoEvents 函数会返回一个 Integer,以代表 Visual Basic 独立版本中打开的窗体数目,例如,Visual Basic,专业版,在其它的应用程序中,DoEvents 返回 0。

    DoEvents 会将控制权传给操作系统。当操作系统处理完队列中的事件,并且在 SendKeys 队列中的所有键也都已送出之后,返回控制权。

    DoEvents 对于简化诸如允许用户取消一个已启动的过程 — 例如搜寻一个文件 — 特别有用。对于长时间过程,放弃控制权最好使用定时器或通过委派任务给 ActiveX EXE 部件来完成。以后,任务还是完全独立于应用程序,多任务及时间片由操作系统来处理。

    小心 确保以 DoEvents 放弃控制权的过程,在第一次 DoEvents 返回之前,不能再次被其他部分的代码调用;否则会产生不可预料的结果。此外,如果其它的应用程序可能会和本过程以不可预知的方式进行交互操作,那么也不要使用 DoEvents,因为此时不能放弃控制权。


    DoEvents 函数示例
    下列示例在循环中使用 DoEvents 函数,每当循环完成 1000 次时,将执行让给操作系统。DoEvents 返回仅当主应用程序是 Visual Basic时,打开的窗体个数。

    VB code
    ' 创建一个变量来保存加载的 Visual Basic 可见窗体的个数。 Dim I, OpenForms For I = 1 To 150000 ' 循环开始。 If I Mod 1000 = 0 Then ' 如果循环一已完成了 1000 次。 OpenForms = DoEvents ' 将执行让给操作系统。 End If Next I ' 将循环计数器加一。


    在一个循环过程中需要及时输出计算结果的时候,特别有用:
    VB code
    Private Sub Command1_Click() Dim i As Long For i = 1 To 100000 Label1.Caption = i DoEvents '如果省略,则不能显示连续的数字变化 Next End Sub
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ynumiengZHANGYAMING
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 13:15:592楼 得分:0
    请问:为什么省略DoEvents ,就不能显示连续的数字变化;而有DoEvents,则能显示连续的数字变化?请大概作些解释,谢谢!

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • slowgrace
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 15:10:223楼 得分:0
    如果省略doevents,系统不会有控制权去做其他事情,比如,在屏幕上刷新显示label1的caption,而只能等这个循环全做完之后,才能刷新显示,你也就只能看到一个最后的结果,看不到连续变化的数字了……
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • baoguangya
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 15:02:004楼 得分:0
    我有点不明白,控制权转让给系统以后,系统会在何种情况下再把控制权转给程序呢?

    在转让回控制权之前,系统都做了哪些工作?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kris2010
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 09:31:555楼 得分:0
    这个有点像断点的过程, cpu的请求等待队列中, 有当前程序进程也有系统进程, Doevent实际上是减缓当前进程的执行速度, 是个类似定时函数, 应该是和系统的作业调度有关.
    当然这里涉及到的问题之一就是返回的问题, 当有系统级任务在执行, 而长时间不释放资源, 就会造成假死, 一般会限定只响应本程序的动作, 而不是系统级任务
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved