您现在所在的是:

电脑编程

回帖:13个,阅读:10250 [上一页] [1] [2] [下一页]
16274
machelec 版主
文章数:7023
年度积分:-48
历史总积分:16274
注册时间:2003/12/11
发站内信
发表于:2004/6/9 20:11:00
#0楼
我用WINXP系统.VB6.0
编了个程序需要不停的检测LPT1口的状态,所以使用了如下的语句:

while  -1
     检测LPT1口程序
wend

可是这个程序执行了一会儿CPU使用率就达到了100%导致该程序不响应.
求教这类问题的解决办法,谢谢!表情
卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐
谓正途,崎岖当先
5386
dzfa 版主
文章数:2048
年度积分:53
历史总积分:5386
注册时间:2003/1/7
发站内信
发表于:2004/6/10 9:18:00
#1楼
循环中应加入一条释放CPU使用权给系统处理其它请求的指令吧,DELPHI里有,VB里也应该有.
烟台东泽----西门子山东地区之代理商,系统集成商
里的打杂的
16274
machelec 版主
文章数:7023
年度积分:-48
历史总积分:16274
注册时间:2003/12/11
发站内信
发表于:2004/6/10 18:34:00
#2楼
谢谢
卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐
谓正途,崎岖当先
29673
思南 管理员
文章数:14047
年度积分:62
历史总积分:29673
注册时间:2001/3/12
发站内信
发表于:2004/6/10 23:06:00
#3楼
DOEvents.
有很多程序员都不了解VB中的DoEvents函数。DoEvents函数可以临时返回控制器给操作系统,并允许它完成其他可能发生的事件。
当一个程序的代码需要花很长的时间去执行,比如在一个复杂的数学计算的时候,你需要运用DoEvents函数。在你代码适当的位置调用DoEvents函数,能够改变程序响应的时间。

这里有一个例子:在VB里创建一个标准的EXE文件并放置一个CommandButton和一个TextBox,然后,将下面的代码放入CommandButton的单击事件处理程序中:
 Private Sub Command1_Click()
Dim i As Long, j As Long
For i = 1 To 100
Text1.Text = i
For j = 1 To 100000
 NextNext

Text1.Text = “Done”
End Sub

   你可以发现这个程序中有嵌套式循环,循环将持续几秒钟。每次,外部循环反复执行I

的值显示在text box中。当循环结束时,Done也显示出来了。

在你运行这个程序的时候究竟发生了什么呢?然而,text box不会改变直到Done显示

出来。问题在于在执行循环的时候系统非常繁忙,而循环语句中的I要显示在text box里面,这延迟windows队列。当循环完成以后,所有的请求都被执行。

  现在在Text1.Text = i调用DoEvents函数。当你运行程序的时候,你会发现text box记下了I的值。调用DoEvents函数可以释放系统内存来完成其他请求,然后将控制器返回给VB程序。

   虽然调用DoEvents函数是以速度为代价,但是可以让程序有时间执行其他的事件,这个代价是值得的。



图
如您对论坛有好的建议或创想,请加大版主微信号:gkong2015
大版主推荐【工控百家谈】微信公众号,业界大拿原创内容分享
1921
dingsc
文章数:293
年度积分:50
历史总积分:1921
注册时间:2002/9/19
发站内信
发表于:2004/6/10 23:08:00
#4楼
doevents
16274
machelec 版主
文章数:7023
年度积分:-48
历史总积分:16274
注册时间:2003/12/11
发站内信
发表于:2004/6/11 7:25:00
#5楼
谢谢!这样我就明白了.
卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐卍卐
谓正途,崎岖当先
1472
Lin1010
文章数:205
年度积分:50
历史总积分:1472
注册时间:2003/10/22
发站内信
发表于:2004/6/24 17:45:00
#6楼
OK!
1187
dogsen
文章数:184
年度积分:50
历史总积分:1187
注册时间:2004/12/10
发站内信
发表于:2004/12/11 11:01:00
#7楼
doevents, ok
1187
dogsen
文章数:184
年度积分:50
历史总积分:1187
注册时间:2004/12/10
发站内信
发表于:2004/12/11 16:14:00
#8楼
guanshui
40354
tigermu 版主
文章数:14903
年度积分:1312
历史总积分:40354
注册时间:2004/8/12
发站内信
2018论坛优秀版主
2018春节活动(二)
2017论坛优秀版主
2017国庆活动(一)
2016论坛优秀版主
2016国庆活动(一)
2015论坛优秀版主
西门子logo体验(三)
英威腾PLC体验(三)
2015春节活动
2014论坛优秀版主
2013论坛优秀版主
2012论坛优秀版主
2010年度论坛贡献奖
发表于:2004/12/11 16:55:00
#9楼
我认为在timer1.time中也可以查询lpt的状态。这样可以避免使用循环。
清泉石上,明月松间。

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

78.0005