DoEvents应用

四阶龙格库塔法求解一次常微分方程组(python实现) 之前在博客发布了关于使用四阶龙格库塔方法求解一次常微分方程组的文章,由于代码缺少具体的验证,部分朋友可能存在疑问,因此这里打算再重新写一篇博客来验证一下程序的正确性,另外,这里是使用python语言来实现的。 阅读详情

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

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

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

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

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

使用 DoEvents

尽管 Timer 事件是后台处理的最好工具,对耗时极多的任务,情况更是如此,但是,DoEvents 函数还是提供了一种取消任务的简便方法。例如,下列代码将显示一个 "Process" 按钮,单击这个按钮时,它将变成 "Cancel" 按钮。再次单击按钮又将中断正在执行的任务。

'此按钮标题是 "Process"
Private Sub Command1_Click()
'过程的所有实例都共享静态变量。
  Static blnProcessing As Boolean
  Dim lngCt As Long
  Dim intYieldCt As Integer
  Dim dblDummy As Double
  '按下按钮时,检测是否在处理
  If blnProcessing Then
   '如果正在处理,则取消
      blnProcessing = False
  Else
      Command1.Caption = "Cancel"
      blnProcessing = True
      lngCt = 0
   '执行一百万次浮点乘法计算。每一千次后,检测是否要取消。
      Do While blnProcessing And (lngCt < 1000000)
        For intYieldCt = 1 To 1000
            lngCt = lngCt + 1
            dblDummy = lngCt * 3.14159
        Next intYieldCt
      'DoEvents 语句允许其它事件发生,包括第二次按此按钮。
        DoEvents
      Loop
      blnProcessing = False
      Command1.Caption = "Process"
      MsgBox lngCt & " multiplications were performed"
  End If
End Sub

DoEvents 将控制切换到操作环境内核。只要此环境中的所有应用程序都有机会响应待处理事件,应用程序就又恢复控制。这不会使应用程序放弃焦点,但会使后台事件能够得到处理。

这种妥协的结果可能并不总是达到预期目标。例如,下述 Click 事件代码在单击按钮后要一直等候十秒钟,而后才显示一条信息。如果在按钮正在等待期间单击它,则将以相反顺序完成单击操作。

Private Sub Command2_Click()
  Static intClick As Integer
  Dim intClickNumber As Integer
  Dim dblEndTime As Double
      '每次单击按钮时
      '赋予唯一数值。
  intClick = intClick + 1
  intClickNumber = intClick
      '等待十秒。
  dblEndTime = Timer + 10#
  Do While dblEndTime > Timer
      '不做任何事情,仅仅允许
      '其它应用程序处理
      '它们的事件。
      DoEvents
  Loop
  MsgBox "Click " & intClickNumber & " is finished"
End Sub

对于通过 DoEvents 放弃控制的事件过程,有时可能希望防止在 DoEvents 返回之前重新调用这一过程。否则将无穷无尽地调用该过程,直到系统资源消耗殆尽。可暂时禁止控件,或象上例一样,使用一个静态的“标志”变量防止此事发生。

在使用全局数据时避免 DoEvents
当一个函数已通过 DoEvents 放弃控制时,可相当安全地再次调用函数。例如,下一过程将检测质数并用 DoEvents 语句周期地启动其它应用程序处理事件:

Function PrimeStatus (TestVal As Long) As Integer
  Dim Lim As Integer
  PrimeStatus = True
  Lim = Sqr(TestVal)
  For I = 2 To Lim
      If TestVal Mod I = 0 Then
        PrimeStatus = False
        Exit For
      End If
      If I Mod 200 = 0 Then DoEvents
  Next I
End Function

该代码中每重复 200 次就调用一次 DoEvents 语句。这样一来,当该环境的其余部分对事件作出响应时,只要有必要,PrimeStatus 过程就可继续计算。

考虑在调用 DoEvents 期间发生的事情。在其它窗体和应用程序处理事件时将暂停执行应用程序代码。这些事件之一有可能是一个按钮单击操作,它将再次启动 PrimeStatus 过程。

这将导致重新进入 PrimeStatus 过程的,但是,因为在函数每次出现时,堆栈都为其参数和局部变量分配了空间,所以重入不会引发冲突。当然,如果过多调用 PrimeStatus,则可能出现“溢出堆栈空间”错误。

如果 PrimeStatus 使用或改变模块级变量或全局数据,情况就会完全不同。此时,在 DoEvents 能够返回之前执行 PrimeStatus 的另一个实例,这将导致模块数据或全局数据的值完全不同于它们在调用 DoEvents 之前的值。于是,PrimeStatus 的结果将会难以预料。


       以上代码来自: 源代码数据库(SourceDataBase)
           当前版本: 1.0.392
               作者: Shawls
           个人主页: Http://Shawls.Yeah.Net
             E-Mail: ShawFile@163.Net
                 QQ: 9181729

ABAP 7.40 新语法介绍系列之六:使用 FILTER 关键字对 ABAP 内表进行过滤 笔者之前写过的关于 ABAP 740 新语法的文章:本文介绍另一个新的关键字:FILTER.FILTER 是 ABAP 740 中引入的一个关键字,用于简化数据操作,它能够将内部表(Internal Table)中的数据按特定的条件进行过滤,并生成一个新的内部表。FILTER 的引入旨在使代码更加现代化和高效,尤其是在面对大量数据需要过滤的情况下。传统上,开发人员可能需要使用 LOOP AT 结合条件判断来实现,但使用 FILTER 关键字后,代码显得更加简洁且易于维护。 阅读详情

相关推荐

从零到一:手把手部署用友T3标准版11.2及SQL Server 2008R2环境

本文详细介绍了从零开始部署用友T3标准版11.2及SQL Server 2008R2环境的完整流程,包括环境准备、SQL Server安装、环境检测与修复、T3标准版安装实战以及初始化配置与测试。通过手把手的步骤指导和常见问题解决方案,帮助用户顺利完成部署,确保系统稳定运行。

weixin_28339967的博客 455

VBA—Doevents说明

DOevents的含义是转让控制权,以便让操作系统处理其它事件。 更通俗的理解是刷新。 以下用一个例子来说明。 1.先写一个窗体,然后再控制按钮里面写下如下代码 Private Sub CommandButton1_Click() Dim i! i = 1 Do i = i + 1 TextBox1.Value = Str(i) 'DoEvents Loop Until i > 10000 End Sub 这样运行的结果就是得到10001(大概是一瞬间,看不到中间变量)。 注意.

小韩的博客 8636

DC竞赛 国能日新功率预测题 rank21 解决方案(适合新手)

DataCastle国能日新光伏功率预测 数据异常处 本题在测试集中提供了时间、辐照度、风速、风向、温度、压强、湿度、实发辐照度8个特征,以及标签**实际功率**。 而在训练集中只有前七个特征,无实发辐照度。 策略 在观察了数据之后,我们确定实发辐照度是一个强力特征,于是我们采取了stacking的策略: 1. 第一次训练以实发辐照度为标签,预测 测试集的实发辐照度 2....

yyhhlancelot的博客 7294

DoEvents 方法使用小结

MFC 是基于消息队列响应的应用程序框架,UI 和后台关联的代码都属于主工作进程, 如果和UI关联的后台代码阻塞住,那么UI会失去相应,无法接受用户的操作。一般的,如果一段代码需要较长的执行时间,我们会新建一个线程去执行这段代码,执行完后再把结果报告给主工作线程。今天看到一段代码,讲的是DoEvents函数的使用,它可以让出当前操作对系统的占有权,让系统先响应其它消息,然后再回来处理当前任务,摘自

jc70100322的博客 3029

chmod: changing permissions of `/u01/app/oracle/product/11.2.0/dbhome_1/bin/extjobO‘: Operation not

oracle 11.2.0.4安装psu 29141056,日志末尾抛出报错 Patching component oracle.ctx, 11.2.0.4.0... Applying sub-patch '29141056' to OH '/u01/app/oracle/product/11.2.0/dbhome_1' Patching component oracle.rdbms, 11.2.0.4.0... Patching component oracle.rdbms.rman, 11.2.0.

m0_37625564的博客 1833

[QMT量化交易小白入门]-二十四、年化收益47%的全球核心资产轮动策略(含代码解析)

m_days = 25 #动量参考天数period=200m_days被设置为25,表示动量参考的天数为25天;period被设置为200,用于指定获取市场数据的周期长度。

木头大左的博客 2969

VB DoEvents 的使用

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

aliealie的专栏 7520

【ComfyUI】Wan2.2 动态服饰描述驱动换装图生视频

本文介绍了一个基于ComfyUI的Wan2.2动态服饰描述驱动换装工作流,能通过自然语言描述实现人物图像的自动换装并生成动态视频。该工作流结合多模态输入、语言模型驱动生成和视频合成技术,包含图像加载、文本解析(使用Qwen2.5大模型)、潜变量编码、视频帧采样与插值(RIFE VFI)等核心模块,最终通过VHS_VideoCombine输出流畅换装视频。整个流程无需手动干预,支持从"哥特风格"到"未来装甲"等多样化服饰风格的精确转换,通过文本节点控制50-100

Mr数据杨 2585

VB中DoEvents的用途

暂时挂起当前任务,转而完成队列中等待的任务后,再返回当前任务  比如: 如果不用此语句,在你的循环中可能导致你离开窗口处理其它任务(程序)会非常的慢,而用此语句之后,会根据队列中等待的任务状态进行处理,尽可能不影响你程序运行中做其它的工作。    转移到下一个控件进行事件响应时,例如,窗体卸载,即将打印,即将CSV,在对记录集进行操作时对其他     处理其它事件是什么呢?顾名思

fenghome的专栏 9649

【Bug已解决】claude: No such file or directory — Claude Code 命令凭空消失解决方案

方案适用场景推荐指数难度方案一:重建软链接所有平台,软链接断裂⭐⭐⭐⭐⭐低方案二:修复 shebangnvm 用户,不想重装⭐⭐⭐⭐中方案三:nvm default aliasnvm 用户,长期稳定⭐⭐⭐⭐低方案四:切换到 Volta频繁切换 Node.js 版本⭐⭐⭐中方案五:修复 PATHPATH 配置丢失⭐⭐⭐⭐低方案六:Homebrew 安装macOS 用户,npm 不稳定⭐⭐⭐⭐低根本原因与。

博客 1万+

接口电路设计的关键要点

接口电路设计是嵌入式硬件开发的核心环节,本文系统阐述了五大关键设计要点:1)电平匹配技术,详细分析了3.3V/5V系统互连方案及转换电路计算;2)阻抗匹配原理,包括高速信号反射机制及差分信号处理;3)滤波与去耦设计,提出多级电容配置和"先电容后过孔"布局原则;4)接地设计规范,重点说明模拟/数字地分离及高速信号回流路径;5)防护电路设计,涵盖防反接、过流保护及ESD防护方案。文章通过具体计算公式、器件选型指南和布局技巧,为接口电路设计提供了系统化的解决方案,并附有设计检查清单和典型问题分

weiyvyy的博客 454

VB中重要的DoEvents函数

有很多程序员都不了解VB中的DoEvents函数。DoEvents函数可以临时返回控制器给操作系统,并允许它完成其他可能发生的事件。 dcmaxversion = 7 dcminversion = 3 Do On Error Resume Next plugin = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash." &

taocsdn的专栏 3957

科研问答:医药类本科生(临床、中医、中药与护理)本科阶段是否需要开展科研学习?

医药类本科生(临床、中医、中药与护理)本科阶段是否需要开展科研学习?

MD Code 1508

DoEvents的应用及注意事项

DoEvents的应用及注意事项 转让控制权,以便让操作系统处理其它的事件。DoEvents 函数会返回一个 Integer,以代表 Visual Basic 独立版本中打开的窗体数目,例如,Visual Basic,专业版,在其它的应用程序中,DoEvents 返回 0。DoEvents 会将控制权传给操作系统。当操作系统处理完队列中的事件,并且在 SendKeys 队列中的所有键也...

demonzsmj12315的博客 201

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Application.DoEvents()的应用

<br /> <br />当我们在事件里面进行大量的循环操作时,windows将等待循环结束。此时界面是得不到响应的。为了在WinForm界面上实时地显示每次循环得到的结果,可以用.net提供的Application.DoEvents()。<br />PublicClass Form1<br />    PrivateSub wndButtonGo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles wndBut

Giselite的专栏 1454

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

BackgroundWorker和Application.DoEvents()的应用实例

当我们在事件里面进行大量的循环操作时,windows将等待循环结束。此时界面是得不到响应的。为了在WinForm界面上实时地显示每次循环得到的结果,可以用.net提供的Application.DoEvents();我们定义一个TextBox(ID为txtMessage),一个Button(ID为txtTest)private void btnTest_Click(object sender, Ev

jiangxinyu的专栏 1910

在VB语言中,DOEVENTS的具体的用法和含义

DoEvents的应用及注意事项   转让控制权,以便让操作系统处理其它的事件。 DoEvents 函数会返回一个 Integer,以代表 Visual Basic 独立版本中打开的窗体数目,例如,Visual Basic,专业版,在其它的应用程序中,DoEvents 返回 0。 DoEvents 会将控制权传给操作系统。当操作系统处理完队列中的事件,并且在 SendKeys 队

wzk456的专栏 6987

c sharp 学习之Application.DoEvents()的应用

VS里的摘要:处理当前在消息队列中的所有 Windows 消息。交出CPU控制权,让系统可以处理队列中的所有Windows消息 比如在大运算量循环内,加Application.DoEvents可以防止界面停止响应因为winform的消息循环是一个线程来处理,那么假如你的某个操作比较耗时,那么消息处理得等你这个耗时操作做完了才能继续,而Application.DoEvents方法就是允许你在耗时操作...

qq_38323666的博客 328

c#学习笔记之Application.DoEvents应用

Visual Studio里的摘要:处理当前在消息队列中的所有 Windows 消息。 交出CPU控制权,让系统可以处理队列中的所有Windows消息 比如在大运算量循环内,加Application.DoEvents可以防止界面停止响应 因为winform的消息循环是一个线程来处理,那么假如你的某个操作比较耗时,那么消息处理得等你这个耗时操作做完了才能继续,而Application.DoEvents方法就是允许你在耗时操作的内部调用它,而去处理消息队列中的消息。 像鼠标移动鼠标点击都是window..

weixin_42365213的博客 324

c# 高级开发应用:防止界面卡死之Application.DoEvents应用

Application.DoEvents的功能是处理当前在消息队列中的所有 Windows 消息。 交出CPU控制权,让系统可以处理队列中的所有Windows消息,这样在执行耗时的界面操作加上Application.DoEvents可以防止界面停止响应。 Winform的消息循环是一个线程来处理,那么假如你的某个操作比较耗时,那么消息处理得等你这个耗时操作做完了才能继续,而Application.DoEvents方法就是允许你在耗时操作的内部调用它,而去处理消息队列中的消息。...

csllangzxj的博客 1947

Self-Host c#学习笔记之Application.DoEvents应用 不用IIS也能執行ASP.NET Web API

Self-Host 寄宿Web API 不一定需要IIS 的支持,我们可以采用Self Host 的方式使用任意类型的应用程序(控制台、Windows Forms 应用、WPF 应用甚至是Windows Service)作为宿主。 方法: Nuget上安装Microsoft.AspNet.WebApi.SelfHost库 或者OWIN来承载WebAPI服务 或者...

538

Doevents函数详解

Doevents函数是一个很好用的函数,但很多人对它的用法不清楚或有误解。由于我在网上查到一篇关于此函数的用法,并添加了一些内容,不敢独享,特此献出。    其中有一个“控时循环和变速齿轮”的内容,有点意思,感兴趣的可看一看。    DoEvents函数的功能是:转让控制权,以便让操作系统处理其它的事件。     问:为什么要用doevents?      A.在需要用某一循环处理相当耗时或者很快

风往哪吹~ 4266
上一篇: 读写INI文件的四个函数
下一篇: 对象组件技术COM+
shawls
博客等级 码龄26年 33粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值