Qt Qthread线程中的msleep()和系统时间有什么关系?

lyz007 2018-12-30 10:31:08
下面是Qt Qthread线程的一段代码,正常情况下可以正常的1秒发射一次信号timeout(),但是,当向过去修改系统时间的时候,就会暂停发射信号,比如向后设置5秒时间,信号就会暂停5秒才发射,也就是说时间向后调整多少,信号就会暂停多长时间。而向前修改时间就不会暂停,请问大家这是什么情况?急急急,在线等……………………
#include <thread-time.h>

TIME_QThread::TIME_QThread()
{
delay=1000;
stopped = false;
}
TIME_QThread::~TIME_QThread()
{

}
void TIME_QThread::run()
{
while(!stopped)
{
//msleep(1000);
timeout();
msleep(delay);
}

}
void TIME_QThread::stop()
{
stopped = true;
}

...全文
3987 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyz007 2019-04-09
  • 打赏
  • 举报
回复
问题找到了,是时钟芯片8563没焊的原因,驱动程序可能也存在bug
lyz007 2019-01-07
  • 打赏
  • 举报
回复
2楼的方法我还没有试过!但是,msleep,在mini2440的板子上运行就没有这个问题啊?mini2440的内核版本是2.6.32,imx6的内核版本是4.1,不知道与内核版本有没有关系?
失散糖 2019-01-02
  • 打赏
  • 举报
回复
查一下QThread::msleep的源码,在Windows下是用::Sleep实现的,在linux下是用循环nanosleep实现的。 我猜,可能前者是纯粹的延时,后者是用当前时间加上延时时间作为目标时间,然后死等目标时间到达,所以改时间会影响那个时间差。 试一试std::this_thread::sleep_for (std::chrono::milliseconds (1));这个是C++11新增的东西,貌似在linux下和在windows的效果,与QThread::msleep正相反,linux下是纯粹延时,windows下是当前时间加上延时时间作为目标时间并死等。。。貌似是这样。。。
lyz007 2018-12-30
  • 打赏
  • 举报
回复
刚才的问题,补充下,程序在PC上运行是没有问题的,只有在imx6g2c的板子上运行才会出现问题!!!!

16,224

社区成员

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

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