社区
资源
帖子详情
请问Windows下如何实现十个毫秒以内的定时?
fggcsdn
2003-03-22 10:38:16
由于Windows的非实时性,好像只能实现100个毫秒以上的
定时吧,如果要实现10个毫秒内的定时该怎么做呢?
谢谢
...全文
103
6
打赏
收藏
请问Windows下如何实现十个毫秒以内的定时?
由于Windows的非实时性,好像只能实现100个毫秒以上的 定时吧,如果要实现10个毫秒内的定时该怎么做呢? 谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
WJZMLSH
2003-04-09
打赏
举报
回复
同意CASINOSUN的GETTICKCOUNT可以要求误差不大于1毫秒的情况下,以毫秒为单位返回启动以来的毫秒数DWORD值。不过要设线称启动定时器。
DWORD dwStart, dwStop;
// 起始值和终止值
dwStop = GetTickCount();
while(TRUE)
{
dwStart = dwStop;
// 上一次的终止值变成新的起始值
// 此处添加相应控制语句
do
{
dwStop = GetTickCount();
} while(dwStop - 50 < dwStart);
}
高精度时控函数
对于一般的实时控制,使用GetTickCount()函数就可以满足精度要求,但要进一步提高计时精度,就要采用QueryPerformanceFrequency()函数和QueryPerformanceCounter()函数。这两个函数是VC提供的仅供Windows 9X使用的高精度时间函数,并要求计算机从硬件上支持高精度计时器。QueryPerformanceFrequency()函数和QueryPerformanceCounter()函数的原型为:
BOOL QueryPerformanceFrequency(LARGE—INTEGER *lpFrequency);
BOOL QueryPerformanceCounter(LARGE—INTEGER *lpCount) ;
数据类型LARGE—INTEGER既可以是一个作为8字节长的整型数,也可以是作为两个4字节长的整型数的联合结构,其具体用法根据编译器是否支持64位而定。该类型的定义如下:
typedef union —LARGE—INTEGER
{
struct
{
DWORD LowPart; // 4字节整型数
LONG HighPart; // 4字节整型数
};
LONGLONG QuadPart;
// 8字节整型数
} LARGE—INTEGER;
在进行计时之前,应该先调用QueryPerformanceFrequency()函数获得机器内部计时器的时钟频率。笔者在主频为266、300、333的三种PentiumⅡ机器上使用该函数,得到的时钟频率都是1193180Hz。接着,笔者在需要严格计时的事件发生之前和发生之后分别调用QueryPerformanceCounter()函数,利用两次获得的计数之差和时钟频率,就可以计算出事件经历的精确时间。以下程序是用来测试函数Sleep(100)的精确持续时间。
LARGE—INTEGER litmp;
LONGLONG QPart1,QPart2;
double dfMinus, dfFreq, dfTim;
QueryPerformanceFrequency(&litmp);
// 获得计数器的时钟频率
dfFreq = (double)litmp.QuadPart;
QueryPerformanceCounter(&litmp);
// 获得初始值
QPart1 = litmp.QuadPart;
Sleep(100) ;
QueryPerformanceCounter(&litmp);
// 获得终止值
QPart2 = litmp.QuadPart;
dfMinus = (double)(QPart2 - QPart1);
dfTim = dfMinus / dfFreq;
// 获得对应的时间值
QQSEVEN
2003-04-06
打赏
举报
回复
利用多媒体定时器可以达到一个毫秒的定时,如果你需要源码,发信来我的信箱。
liuxiaomei_521@163.com
菜牛
2003-04-06
打赏
举报
回复
http://www.aogosoft.com/bbs/mixpage.asp?mode=viewoktext&fileid=54
http://www.gameres.com/Control/CPUTime.htm
casinosun
2003-03-24
打赏
举报
回复
GETTICKCOUNT
菜牛
2003-03-24
打赏
举报
回复
QueryPerformanceCounter Retrieves the current value of the high-resolution performance counter.
QueryPerformanceFrequency Retrieves the frequency of the high-resolution performance counter.
eagleldj
2003-03-22
打赏
举报
回复
计时器的最小值 在win98大约是55毫秒,NT中大约是10毫秒.这好像和硬件有关,比较难调吧!
VB编程资源大全(源码 其它3)
(200KB) 636,o016.zip 演示银河系的例子 (28KB) 637,o015.zip 计数器(10KB) 638,o014.zip 文件加密/解密的例子 (345KB) 639,o013.zip 将十亿
以内
的数字转换成文本文字(4KB) 640,o012....
VB编程资源大全(源码 其它1)
(200KB) 636,o016.zip 演示银河系的例子 (28KB) 637,o015.zip 计数器(10KB) 638,o014.zip 文件加密/解密的例子 (345KB) 639,o013.zip 将十亿
以内
的数字转换成文本文字(4KB) 640,o012....
VB编程资源大全(源码 其它2)
(200KB) 636,o016.zip 演示银河系的例子 (28KB) 637,o015.zip 计数器(10KB) 638,o014.zip 文件加密/解密的例子 (345KB) 639,o013.zip 将十亿
以内
的数字转换成文本文字(4KB) 640,o012....
VB编程资源大全(源码 其它4)
(200KB) 636,o016.zip 演示银河系的例子 (28KB) 637,o015.zip 计数器(10KB) 638,o014.zip 文件加密/解密的例子 (345KB) 639,o013.zip 将十亿
以内
的数字转换成文本文字(4KB) 640,o012....
用
Windows
API编写一个精确
定时
的循环
这几天跟网友讨论一个程序优化问题时,遇到一个需要延时的循环,结合我所知道的知识,并突发灵感,想到了用
Windows
系统提供的
定时
器API写一个精确延时循环的方法。 问题原本是这个样子的,就是说,在一个循环中执行...
资源
2,586
社区成员
18,441
社区内容
发帖
与我相关
我的任务
资源
VC/MFC 资源
复制链接
扫一扫
分享
社区描述
VC/MFC 资源
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章