| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1723 人关注过本帖
标题:画图的问题
只看楼主 加入收藏
chen3bing
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:507
专家分:104
注 册:2008-11-12
结帖率:91.22%
收藏
已结贴  问题点数:10 回复次数:9 
画图的问题
我画图,一秒钟画一个点,然后有一个文本框,实时显示时间。画点的程序是用定时器中断方式(Private Sub Timer1_Timer())
那个文本框显示的时间是准的,可是用的是查询方式,代码如下:
 second2 = timeGetTime
 second = second2 - second1
second = second / 1000
可是画图需要用中断方式画,否则一直查询干不了别的事。
请问高手,如何解决?谢谢!
搜索更多相关主题的帖子: 画图 显示 时间 中断 second 
2018-12-15 09:50
wds1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:49
帖 子:393
专家分:2025
注 册:2016-3-10
收藏
得分:1 
second2 = timeGetTime
 second = second2 - second1
 second = second / 1000
 doevents'增加此语句,就可以响应中断【最好在所有显示语句后面都增加】


2018-12-15 11:31
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:2 
在WINDOWS平台,或者其他多任务平台的系统中,编程需要把握的原则是:主线程不能执行死循环操作。
VB天生单线程,也就默认只有一个线程,也就是主线程。

解决方案有几种:
1、按2楼的这种释放CPU控制权的方法再间接实现。
2、使用多线程。专门使用一个线程来负责查询,每次查询后,线程休眠N毫秒。实现方法可以百度。
3、把查询也改在 定时器里,定时器设为100毫秒触发一次。100毫秒是VB定时器的最小精度。

授人于鱼,不如授人于渔
早已停用QQ了
2018-12-15 12:07
chen3bing
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:507
专家分:104
注 册:2008-11-12
收藏
得分:0 
回复 2楼 wds1
谢谢,我还是不明白。你能再详细说一下嘛
2018-12-15 14:22
wds1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:49
帖 子:393
专家分:2025
注 册:2016-3-10
收藏
得分:3 
1、DoEvents 函数 可以转让控制权。

  但是并不会所有的情况都能转让成功,只有你的程序处理耗时小于让出的时间片,才能处理成功。
  简单理解就是,较少的响应事件这种方式还是可以的。

2、比较好的方法还是利用timer,实现多线程。

  timer1控制显示
  timer2控制画图

  可以在程序中对timer1.Interval=0 停止定时器,timer1.Interval=数值 启动定时器

3、如果你觉得timer控制时间不准,可以自己写个延时函数。
  
  sleep(1000)'表示延时1秒

'==================时间延时函数(毫秒)================================
  Private Sub sleep(seconds As Integer)
   Dim temp As Variant
   temp = timeGetTime
   While timeGetTime - seconds < temp
    DoEvents
   Wend
  End Sub  

2018-12-15 15:03
chen3bing
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:507
专家分:104
注 册:2008-11-12
收藏
得分:0 
回复 5楼 wds1
谢谢!我想用你第二个方法。可是你说两个定时器1个显示,一个画图,我不懂,
是说双缓冲吗?用定时器还是不准呀。我的横轴是时间,一秒钟走一格。
如果差的太多,波形就走样了。
2018-12-15 16:56
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:4 
如果你是 1秒显示时间,然后立即显示波形,就用一个定时器。
定时器设置触发时间最短的,然后在定时器里每次都对当前时间进行判断,如果过了超过1秒,就更新一次,并且绘图。否则本次定时器事件结束。

假如你显示显示时间需要1毫秒,画图需了1毫秒生成指令,然后显示出来需要10毫秒。在一个定时器周期(假设为1毫秒)中处理不完,
但不影响程序运行啊,因为程序下一次定时器触发时,检查与上一次显示时间想差不到1000毫秒,立马就可以结束本次定时器。当检查到时间超过1000毫秒时,一般根据系统负荷的不同,稍会超过一点,不会超出很多。一般在几毫秒之间。对于人体来说,这个时间根本感觉不出来。波形也不会有所变化。

拆线图可以参考  
https://bbs.bccn.net/viewthread.php?tid=306299&extra=page%3D1%26amp%3Bfilter%3Ddigest&page=1

授人于鱼,不如授人于渔
早已停用QQ了
2018-12-15 17:20
chen3bing
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:507
专家分:104
注 册:2008-11-12
收藏
得分:0 
回复 7楼 风吹过b
谢谢!我觉得你这个方法可行
2018-12-15 17:40
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 5楼 wds1
仅使用timer无法实现多线程。

能编个毛线衣吗?
2018-12-15 20:22
坚持到底zlj
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2018-12-15
收藏
得分:0 
受益匪浅
2018-12-16 10:05
快速回复:画图的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020887 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved