如题,而且在不同主频的PC下也能够达到同样的精度
解决方案 »
- SetWindowsHookEx 怎么拦截获 WM_NCHITTEST消息?
- 如何给任意一个字符串加下划线?
- 如何调出操作系统的"日期时间 属性"对话框
- 在VC里面如何编译和引入GD库啊,神啊,救救我吧
- visual studio.net 2003
- 组件实现屏蔽浏览器(ie,firefox)中的”另存为“和“查看源代码”菜单的功能。急!!!
- 使用BCG,如何在菜单项上面添加ICON
- 请大家帮忙,急,谢谢!
- 如何创建在Asp中用CreateObject调用的dll库啊?
- 请指点:我的对话框里有个STATIC,想在其中显示一副图,且该图想以资源的形式放在程序中,如何操作?
- 问一下:用editview生成的单文档中如何得到所打开文件的文件名?
- 如何调试dll?
我在写I2C for WIN XP的程序,发现这是最麻烦的地方。延时的时间如果太长,则通讯速度太慢
用VXD试试,应该可以
BOOL QueryPerformanceCounter(
LARGE_INTEGER *lpPerformanceCount // pointer to counter value
);BOOL QueryPerformanceFrequency(
LARGE_INTEGER *lpFrequency // address of current frequency
);
#define OVERHEAD 0xFFFFFFFF
void CTestPerfTimerDlg::DelayMicorSecond(double us)
{
LARGE_INTEGER PerFreq;
LONGLONG StartQuad,StopQuad;
double dFreq,dTime,deltaQuad; if(QueryPerformanceFrequency(&PerFreq))
dFreq = (double)PerFreq.QuadPart;
else
AfxMessageBox("Error");
QueryPerformanceCounter(&PerFreq);
StartQuad = PerFreq.LowPart;
while(true)
{
// DunselFunction();//delay function
QueryPerformanceCounter(&PerFreq);
StopQuad = PerFreq.LowPart;
deltaQuad =(double)( (StopQuad>=StartQuad)?(StopQuad-StartQuad):(StopQuad-StartQuad+OVERHEAD));
dTime = (double)(deltaQuad/dFreq);
if(dTime*1000000>=us)
break;
}
}精确度在1.2us左右