关于定时器与线程
目前在主线程中用QObject::starttime(20)启动一个定时器,20毫秒触发一次。timerEvent里面对一个全局变量g_nNum加+1,并用qDebug()显示当前时间"A",显示时间到毫秒
另外创建了一个新线程myThread,继承于QThread,重写了run()函数,run()函数内用了一个死循环
while(1)
{
}
因为这个线程从始至终要一直运行。在循环内,一直判断全局变量g_nNum是否大于0,如果大于0,则执行g_nNum--,用qDebug()显示出当前时间"B",显示时间到毫秒。
按照我的想法,应该每次都是显示一次"A"再显示一次"B",但实际运行过程偶尔会有连续出现两次"A"再连续出现两次"B"的情况。而且这种方式程序占CPU资源比较严重,应该是线程myThread中死循环的原因。后来在循环中加了如下语句
while(1)
{
if(g_nNum > 0)
{
// 执行显示时间
g_nNum--;
}
else
{
usleep(1); // 重写的QThread::usleep
}
}
发现这样CPU资源占用情况好了很多,但是定时器显示内容A的间隔时间远大于设定时间20毫秒了,而且"A""B"显示也不是成对出现,上述连续出现两次A再出两次B的情况也还是有。
应该是新线程中run()函数处理对主线程中定时器有影响,但不知道有没有别的办法能够避免。