| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1254 人关注过本帖
标题:请教延时问题?
只看楼主 加入收藏
wxzd123
Rank: 2
等 级:论坛游民
帖 子:401
专家分:69
注 册:2012-9-6
结帖率:87.76%
收藏
已结贴  问题点数:20 回复次数:18 
请教延时问题?
使用Declare Sleep IN kernel32 INTEGER dwMilliseconds
或木瓜老师Set Library To myFll
Sleep(1) 大约16ms左右
使用inkey()大约70ms左右
请问还有其他方法吗?
吹水佬版主提过要更高精度的可试试API的QueryPerformanceCounter()或QueryPerformanceFrequency()这两个怎么用?
谢谢
搜索更多相关主题的帖子: 高精度 方法 Sleep 左右 延时 
2023-04-13 11:32
倦猫1973
Rank: 2
等 级:论坛游民
威 望:1
帖 子:68
专家分:28
注 册:2022-11-17
收藏
得分:0 
有意思,我很想知道你得怎么测的,你有毫秒表不成?

图片附件: 游客没有浏览图片的权限,请 登录注册

2023-04-13 13:13
倦猫1973
Rank: 2
等 级:论坛游民
威 望:1
帖 子:68
专家分:28
注 册:2022-11-17
收藏
得分:0 
百度了一下书上说:操作系统级的最高精度只能是3毫秒,且不管是什么系统。如果需要突破这一层限制,得用 MASM。
2023-04-13 13:17
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10608
专家分:43190
注 册:2014-5-20
收藏
得分:0 
以下是引用wxzd123在2023-4-13 11:32:44的发言:

使用Declare Sleep IN kernel32 INTEGER dwMilliseconds
或木瓜老师Set Library To myFll
Sleep(1) 大约16ms左右
使用inkey()大约70ms左右
请问还有其他方法吗?
吹水佬版主提过要更高精度的可试试API的QueryPerformanceCounter()或QueryPerformanceFrequency()这两个怎么用?
谢谢

VFP解释语言层面就谈不上高精度延时,定时器也说的是毫秒级,纯VFP命令测试可能有几十毫秒以上。
程序代码:
DECLARE long QueryPerformanceFrequency IN kernel32 string@
DECLARE long QueryPerformanceCounter   IN kernel32 string@
large = REPLICATE(0h00,8)
QueryPerformanceFrequency(@large)
nFreq = CTOBIN(LEFT(large,4),"4rs")
QueryPerformanceCounter(@large)
nBegin = CTOBIN(LEFT(large,4),"4rs")
QueryPerformanceCounter(@large)
nEnd = CTOBIN(LEFT(large,4),"4rs")
DO WHILE ((nEnd - nBegin) / nFreq) < 0.001
    QueryPerformanceCounter(@large)
    nEnd = CTOBIN(LEFT(large,4),"4rs")
ENDDO
? (nEnd - nBegin) / nFreq




[此贴子已经被作者于2023-4-13 15:50编辑过]

2023-04-13 15:24
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10608
专家分:43190
注 册:2014-5-20
收藏
得分:0 
QueryPerformanceCounter是1us级,用的是64位计数,VFP要扩展才可以做得高精度。
用 C 测试:
图片附件: 游客没有浏览图片的权限,请 登录注册

2023-04-13 15:42
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10608
专家分:43190
注 册:2014-5-20
收藏
得分:0 
SECONDS() 1ms级
t = SECONDS()
DO WHILE (SECONDS()-t) < 0.001
ENDDO
? SECONDS()-t
2023-04-13 15:55
wxzd123
Rank: 2
等 级:论坛游民
帖 子:401
专家分:69
注 册:2012-9-6
收藏
得分:0 
谢谢版主,每次执行还有变化
图片附件: 游客没有浏览图片的权限,请 登录注册
2023-04-13 19:54
iswith
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:454
专家分:611
注 册:2013-5-14
收藏
得分:0 
[quote]以下是引用倦猫1973在2023-4-13 13:17:06的发言:
我比较赞同这个思路,在windows系统上你不管如何努力,精度不会太高。。。。
2023-04-13 21:24
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10608
专家分:43190
注 册:2014-5-20
收藏
得分:20 
以下是引用wxzd123在2023-4-13 19:54:10的发言:

谢谢版主,每次执行还有变化

解释语言是这样的了,要求不能太高。
简单写个us级的dll给VFP试试能否满足要求
delay.rar (24.77 KB)

测试代码
程序代码:
CLEAR 
DECLARE double delay IN delay.dll double
? delay(0.000001)
? delay(0.001)
? delay(0.1)
? delay(0.5)
? delay(1)
2023-04-13 21:55
wxzd123
Rank: 2
等 级:论坛游民
帖 子:401
专家分:69
注 册:2012-9-6
收藏
得分:0 
版主这个厉害
2023-04-13 22:08
快速回复:请教延时问题?
数据加载中...
 
   



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

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