用qt实现高精准的定时,精度1ms做得到吗?

MOSH97 2015-04-23 06:33:46
用qt实现高精准的定时,精度1ms做得到吗?
...全文
4503 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
donwmufromdying 2015-05-19
  • 打赏
  • 举报
回复
顺便看了看这个网页:https://msdn.microsoft.com/en-us/library/dn553408(v=vs.85).aspx 还有这个函数:BOOL WINAPI QueryPerformanceCounter( _Out_ LARGE_INTEGER *lpPerformanceCount );
donwmufromdying 2015-05-19
  • 打赏
  • 举报
回复 1
据说这个算法能精确到微秒。我准备马上测试一下 下列代码实现1微秒的精确定时: LARGE_INTEGER litmp; LONGLONG QPart1,QPart2; double dfMinus, dfFreq, dfTim; QueryPerformanceFrequency(&litmp); dfFreq = (double)litmp.QuadPart;// 获得计数器的时钟频率 QueryPerformanceCounter(&litmp); QPart1 = litmp.QuadPart;// 获得初始值 do { QueryPerformanceCounter(&litmp); QPart2 = litmp.QuadPart;//获得中止值 dfMinus = (double)(QPart2-QPart1); dfTim = dfMinus / dfFreq;// 获得对应的时间值,单位为秒 }while(dfTim <0.000001); 其定时误差一般不超过0.5微秒,精度与CPU等机器配置有关。
romepop1 2015-05-17
  • 打赏
  • 举报
回复
我在android机器上试过,20ms可以,10ms勉强,1ms没试过,但是觉得肯定不行。
shaogent 2015-05-17
  • 打赏
  • 举报
回复
引用 2 楼 hero_kitty 的回复:
如果用的非实时操作系统(Windows、iOS、Android等),不可能做到1ms的精度,因为操作系统的时间轮询都得5ms,在Windows操作系统上,非Server版(WinXP/7/8)每个子线程的事件轮询是7~8个时间片(5*5ms),Server版(WinServer2003/2008)每个子线程的事件轮询是3~5个时间片。要想用高精度定时(小于15ms),只能用实时操作系统,利用硬件的中断来做。
同意二楼的说法,如果有硬件设备最好是利用硬件的晶振来计算时间。如果必须使用软件,建议你找几个不同系列的CPU计算一下,然后根据这个或许可以加强精准度,同时也测试一下可行性。
Inhibitory 2015-05-17
  • 打赏
  • 举报
回复
臣妾做不到啊。。。。。。。。。。
A0hp90 2015-05-04
  • 打赏
  • 举报
回复
如果用的非实时操作系统(Windows、iOS、Android等),不可能做到1ms的精度,因为操作系统的时间轮询都得5ms,在Windows操作系统上,非Server版(WinXP/7/8)每个子线程的事件轮询是7~8个时间片(5*5ms),Server版(WinServer2003/2008)每个子线程的事件轮询是3~5个时间片。要想用高精度定时(小于15ms),只能用实时操作系统,利用硬件的中断来做。
  • 打赏
  • 举报
回复
可以啊,给你的定时器独立开启一个线程,只管发送信号执行回调函数,不要因为执行操作延时就可以了

16,798

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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