wince工控机有一个实时显示数据的功能,我在xp中模拟,
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);提升了当前进程的优先级;
SetThreadPriority(handle,THREAD_PRIORITY_TIME_CRITICAL);实时数据的功能是在这个线程中完成的,也提升了优先级。但用sleep(1000)或
void wait(int seconds)
{
clock_t endwait;
endwait = clock() + seconds *CLK_TCK;
while(clock() < endwait)
{
}
}
都不能准确的进来,出现掉数据的情况,想问大家是怎么解决的?
------解决方案--------------------
用 GET TICK 来做吧,
GET TICK 返回的是 MS 为单位,
相差 1000 MS 表示 1S
------解决方案--------------------
可以考虑使用多媒体计时器,精度很好
------解决方案--------------------
楼主,用SleepTillTick 很精确到1ms的边界触发一次时间。 我用示波器打过,很精确。网上也说延迟是微秒级别。 楼主可以试试。
给你个例子:
typedef void (*PFN_SleepTillTick)();
int _tmain(int argc, _TCHAR* argv[])
{
PFN_SleepTillTick SleepTillTick = NULL;
HINSTANCE hInst = LoadLibrary(L"coredll.dll");
SleepTillTick = (PFN_SleepTillTick)GetProcAddress(hInst, L"SleepTillTick");
if (NULL == SleepTillTick)
{
wprintf(L"error\n");
return -1;
}
while (1)
{
SleepTillTick( );
// do your job
}
return 0;
}
------解决方案--------------------
500ms很容易就准确吧,实际上刷数据不可能刷太快,根本就看不过来。所以普通的定时器我觉得都够了。
是不是你代码有啥问题,比如每个周期要做很多事情,导致定时器卡了?