驱动问题,在windowsXP上可以精确到3.3毫秒计时吗? 驱动问题,在windowsXP上可以精确到3.3毫秒计时吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 但是不能保证3.3 Windows不是实时系统 谢谢!能不能用上windows的时钟中断,完成精确对时到3.3毫秒?即使不能,有多高的精度呢? 毫秒级还不算苛刻。可以用高精度计数器QueryPerformanceCounter http://blog.csdn.net/supconsupcon/archive/2009/10/05/4633482.aspx这个? 精度能达到1000纳秒,驱动下。很多内核函数可用但是,Windows不是一个实时系统,我必须提醒下你 请问fangchao918628:“DPC定时器好像可以到100ns!!”怎么用?怎么实现呢?用vc有思路,步骤,或例子吗?谢谢。请问Tr0j4n:“Windows不是一个实时系统,我必须提醒下你”这是什么意思,是否表示在windows下,一定不能精确到3.3毫秒呢? 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 如果要相对准确的也可以用KeStallExecutionProcessor(时间),但是这个会浪费CPU时间,要做到完全的3.3ms好像不可能吧,就像Tr0j4n和ziplj说的一样! 这个就KeInitializeDpc初始化DPC设置定时器KeSetTimer,停止定时器KeCancelTimer 你要知道,API的调用也需要时间呀...当你需要精确度不高的时候,API的调用时间完全可以忽略不计。但是你要求精度提高了后,API的调用时间就开始不能忽略了API的调用不是瞬间的,那是一厢情愿。这就是为什么它不是“实时系统”的原因 //开始获取一次硬件时钟 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 );你可以试一下这个 用非模态对话框做主窗口.窗口过程里面的消息不响应.. 视频采集卡选购(主要用于编程) 如何根据字符串名称动态创建对象? 如何让ListBox在响应dblclk的时候不响应SelChange 请问哪位有Visual C++代码标准文档 为什么系统老是发送WM_PAINT消息呢? CTreeCtrl如何转化为CTreeView 不是高手就不用看了,关于 WNetAddConnection 问题? 程序打包发行的问题~~~~~~~~~~~~~~~~~!!~!Installshield的问题 VC写控件时很怪的问题,请教各位大虾 树控件 CHECK的问题 请问现在开发界面程序都用什么语言啊?
能不能用上windows的时钟中断,完成精确对时到3.3毫秒?
即使不能,有多高的精度呢?
但是,Windows不是一个实时系统,我必须提醒下你
“DPC定时器好像可以到100ns!!”
怎么用?怎么实现呢?用vc有思路,步骤,或例子吗?谢谢。请问Tr0j4n:
“Windows不是一个实时系统,我必须提醒下你”
这是什么意思,是否表示在windows下,一定不能精确到3.3毫秒呢?
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
设置定时器KeSetTimer,
停止定时器KeCancelTimer
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 );
你可以试一下这个