精确计时?

tonyzym 2002-07-20 03:07:30
各位大虾,小弟正在编一个控制软件,须精确计时,<=0.1ms,而且希望几乎不受多进程影响,请问该如何实现。已用PerformanceCounter,效果不好,有其他办法吗?
...全文
101 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
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里

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧