导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

精确计时?

tonyzym 2002-07-20 03:07:30
各位大虾,小弟正在编一个控制软件,须精确计时,<=0.1ms,而且希望几乎不受多进程影响,请问该如何实现。已用PerformanceCounter,效果不好,有其他办法吗?
...全文
50 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Areslee 2002-07-22
用DRIVER级的内核时钟
回复
tonyzym 2002-07-22
感谢大家的热心回复,事实上我已经用PerformanceCounter实现了,但如第一篇所说,效果不好,表现为程序切换时采集数据可能出现白线,也有可能不是PerformanceCounter导致的,其他方法好像都不能使精度<=0.1ms。
总之谢谢大家!
回复
doublesword 2002-07-22
http://www2.ccw.com.cn/tips/2k02/022902_03.asp
回复
rick29 2002-07-22
GetTickCount只是说“误差”小于一1ms啊。我试了一下,做个循环调用GetTickCount,结果返回时两个值之间的差要么为0,要为以10ms为步进。可能是机器速度的问题?不会的吧,要不怎么会有t2-t1=0的情况,再者我的机子是1.1GHz的,应该不是机器速度问题,对吧。我现在找精确计时的办法,听说有timeSetEvent()之类的函数,还没试过能不能这么精确。
回复
tonyzym 2002-07-22
已加至100分,请大家帮忙
回复
doublesword 2002-07-22
QueryPerformanceFrequency()函数和QueryPerformanceCounter()函数。这两个函数是Visual C++提供的仅供Windows 95及其后续版本使用的高精度时间函数,并要求计算机从硬件上支持高精度计时器。QueryPerformanceFrequency()函数和QueryPerformanceCounter()函数的原型为:

BOOL QueryPerformanceFrequency
(LARGE_INTEGER *lpFrequency) ;
BOOL QueryPerformanceCounter
(LARGE_INTEGER *lpCount) ;
回复
doublesword 2002-07-22
QueryPerformanceFrequency()函数和QueryPerformanceCounter()函数。这两个函数是Visual C++提供的仅供Windows 95及其后续版本使用的高精度时间函数,并要求计算机从硬件上支持高精度计时器。QueryPerformanceFrequency()函数和QueryPerformanceCounter()函数的原型为:

BOOL QueryPerformanceFrequency
(LARGE_INTEGER *lpFrequency) ;
BOOL QueryPerformanceCounter
(LARGE_INTEGER *lpCount) ;
回复
doublesword 2002-07-22
在要求误差不大于1毫秒的情况下,可以采用GetTickCount()函数(如果读者仍然使用Windows3.1,可以使用GetCurrentTime()函数),该函数的返回值是DWORD型,表示以毫秒为单位的计算机启动后经历的时间间隔。使用下面的编程语句,可以实现50毫秒的精确定时,其误差小于1毫秒。
DWORD dwStart, dwStop ; // 起始值和中止值
dwStop = GetTickCount();
while(TRUE)
{
dwStart = dwStop ; // 上一次的中止值变成新的起始值
// …… 此处添加相应控制语句 ……
do
{
dwStop = GetTickCount() ;
} while(dwStop - 50 < dwStart) ;
}
回复
lc79 2002-07-22
《程序大本营2001》微软版 配套书里有一篇精确定时的文章
回复
tonyzym 2002-07-22
多媒体时钟似乎精度不够,我用的硬件其实是自带时钟的,可以定时向windows发中断,但用户级的应用程序是看不到中断的,不知道如何才能利用这个时钟
回复
彼得 2002-07-22
gz
回复
tonyzym 2002-07-22
?用DRIVER级的内核时钟
大哥,能否说得更清楚一些,究竟如何使用?谢了
回复
zckcowboy 2002-07-20
不断读取系统的时间不可以吗?
回复
Elsie 2002-07-20
多媒体定时器似乎是精确到ms级别的,0.1ms很难达到
在windows下面多进程的话几乎没法做到绝对精确
实在不行就上硬件来控制,自己做块板子插在主板上,呵呵
回复
导工 2002-07-20
timeGetTime(),用多媒体时钟, 在 mmsystem.h里
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……