驱动问题,在windowsXP上可以精确到3.3毫秒计时吗?

baodingwang 2009-11-03 03:18:41
驱动问题,在windowsXP上可以精确到3.3毫秒计时吗?
...全文
166 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
fangchao918628 2009-11-04
  • 打赏
  • 举报
回复
LZ侵犯我肖像权!!
Five_Cent_Nicol 2009-11-03
  • 打赏
  • 举报
回复
//开始获取一次硬件时钟
LARGE_INTEGER nStartCounter;
QueryPerformanceCounter(&nStartCounter);
LARGE_INTEGER nFrequency;
QueryPerformanceFrequency(&nFrequency);

//Function();

//函数结束获取一次硬件时钟,取两者之差
LARGE_INTEGER nStopCounter;
QueryPerformanceCounter(&nStopCounter);
double nTime = 1000 * (nStopCounter.QuadPart - nStartCounter.QuadPart) / nFrequency.QuadPart;
printf("\n测试时间为%f 秒",nTime/1000 );


你可以试一下这个
MoXiaoRab 2009-11-03
  • 打赏
  • 举报
回复
你要知道,API的调用也需要时间呀...当你需要精确度不高的时候,API的调用时间完全可以忽略不计。但是你要求精度提高了后,API的调用时间就开始不能忽略了

API的调用不是瞬间的,那是一厢情愿。这就是为什么它不是“实时系统”的原因
fangchao918628 2009-11-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 baodingwang 的回复:]
请问fangchao918628:
“DPC定时器好像可以到100ns!!”
怎么用?怎么实现呢?用vc有思路,步骤,或例子吗?谢谢。
[/Quote]
这个就KeInitializeDpc初始化DPC
设置定时器KeSetTimer,
停止定时器KeCancelTimer
fangchao918628 2009-11-03
  • 打赏
  • 举报
回复
如果要相对准确的也可以用KeStallExecutionProcessor(时间),但是这个会浪费CPU时间,要做到完全的3.3ms好像不可能吧,就像Tr0j4n和ziplj说的一样!
ziplj 2009-11-03
  • 打赏
  • 举报
回复
如果此时有一个高中断级的程序在运行 你就无法保证3.3ms 但是 一般情况下 精确到3.3是没什么问题的
ziplj 2009-11-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 baodingwang 的回复:]
请问Tr0j4n:
“Windows不是一个实时系统,我必须提醒下你”
这是什么意思,是否表示在windows下,一定不能精确到3.3毫秒呢?
[/Quote]
可以精确到3.3 但是不能保证每次都是3.3
jackyjkchen 2009-11-03
  • 打赏
  • 举报
回复
LARGE_INTEGER begintime;
void TimeStart()
{
QueryPerformanceCounter(&begintime);
}

void TimeDisplay()
{
LARGE_INTEGER endtime,freqtime,resulttime;
QueryPerformanceCounter(&endtime);
QueryPerformanceFrequency(&freqtime);
resulttime.QuadPart = (endtime.QuadPart - begintime.QuadPart) * 1000 / freqtime.QuadPart;
printf("处理时间:%5I64d小时%I64d分%I64d.%03I64d秒",resulttime.QuadPart / 3600000,(resulttime.QuadPart / 60000) % 60,(resulttime.QuadPart /1000) % 60,resulttime.QuadPart % 1000);
}

3毫秒差不多,但是0.1ms的精度危险,虽然数字上可以精确到1us
baodingwang 2009-11-03
  • 打赏
  • 举报
回复
请问fangchao918628:
“DPC定时器好像可以到100ns!!”
怎么用?怎么实现呢?用vc有思路,步骤,或例子吗?谢谢。

请问Tr0j4n:
“Windows不是一个实时系统,我必须提醒下你”
这是什么意思,是否表示在windows下,一定不能精确到3.3毫秒呢?
MoXiaoRab 2009-11-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 baodingwang 的回复:]
谢谢!
能不能用上windows的时钟中断,完成精确对时到3.3毫秒?
即使不能,有多高的精度呢?


[/Quote]
精度能达到1000纳秒,驱动下。很多内核函数可用
但是,Windows不是一个实时系统,我必须提醒下你
do_fork 2009-11-03
  • 打赏
  • 举报
回复
3ms有希望,3.3ms很难
wocow3 2009-11-03
  • 打赏
  • 举报
回复
毫秒级还不算苛刻。可以用高精度计数器QueryPerformanceCounter
baodingwang 2009-11-03
  • 打赏
  • 举报
回复
谢谢!
能不能用上windows的时钟中断,完成精确对时到3.3毫秒?
即使不能,有多高的精度呢?

fangchao918628 2009-11-03
  • 打赏
  • 举报
回复
DPC定时器好像可以到100ns!!
ziplj 2009-11-03
  • 打赏
  • 举报
回复
但是不能保证3.3 Windows不是实时系统
ziplj 2009-11-03
  • 打赏
  • 举报
回复
3.3毫秒 不算高精度 应该可以达到

2,643

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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