主题:DoEvents 安全性
zkyyp
[专家分:0] 发布于 2009-12-23 14:59:00
DoEvents 放弃控制权的过程,在第一次 DoEvents 返回之前,不能再次被其他部分的代码调用;否则会产生不可预料的结果??这句话是什么意思, 什么叫返回之前,不能被其他......
最近程序总是报错 "vb遇到问题需要关闭,对此引起的不便表示抱歉" , 我怀疑是程序里的DoEvents引起的。高手们指点一下。。。
回复列表 (共3个回复)
沙发
我是大喊三 [专家分:3010] 发布于 2009-12-26 00:16:00
你说的情况我也碰到过,所以我曾对用这个函数有点心理障碍似的。但后来我用它来在一个数据处理程序使一个进度条显示当前任务的完成度的时候,并没有发生问题。对“第一次 DoEvents 返回之前,不能再次被其他部分的代码调用;否则会产生不可预料的结果??”这段文字,它也许说的是,此程序不可重入?对DOEVENTS还是没有过深的研究及广泛的实验,不过它涉及到的问题应该是多任务下的进程变量共享或互斥的问题。所以我看到的一本书上是这样告诫的:“要慎重使用DOEVENTS函数,因为需要注意许多事情,例如在使用全局数据时应避免使用DOEVENTS函数,否则可能导致模块数据或全局数据的值完全不同于它们在调用DOEVENTS之前的值,诸如此类。所以在使用DOEVENTS函数之前,最好多查阅一些相关的资料和例程,以免造成不可预知的后果。”
板凳
zkyyp [专家分:0] 发布于 2009-12-26 21:58:00
那有什么可以代替doevents的
比如winsock中 要让数据立刻发送出去! 而不之等过程完才发送数据!
3 楼
我是大喊三 [专家分:3010] 发布于 2009-12-26 23:52:00
DoEvents只是让系统得到控制权而已,可以重新响应你的鼠标键盘操作,以至于让你感觉程序并没有"当"掉.并不是你所错觉的让WINSOCK数据立刻发出去吧.如果网络状态不好,谁也没这本事.
我来回复