Aer. 2021-11-03 22:51 采纳率: 0%
浏览 51

qt延时界面线程的问题,深夜求解答

在线程中使用延时2ms,打印出来却是20多毫秒,弹出QMessagebox阻塞主界面后延时又正常,不知道什么原因,代码如下:

void MainWindow::on_pushButton_clicked()
{
    std::thread th(&MainWindow::test,this);
    th.detach();
}

void MainWindow::test()
{
    int i = 0;
    while (i<3000)
    {
        QTime a = QTime::currentTime();
        QThread::msleep(2);
        QTime b = QTime::currentTime();
        qDebug()<<a.msecsTo(b);
        i++;
    }
}

void MainWindow::on_pushButton_2_clicked()
{
    qDebug()<<"QMessageBox Pop";
    QMessageBox::information(this,"11","11");
}

输出如下

16
27
26
27
16
26
27
26
27
28
QMessageBox Pop
3
3
3
3
2
2
3
3
3
3
3
3
3

  • 写回答

3条回答 默认 最新

  • 关注

    因为线程并不一定是跟主线程并行运行的,有时候,主线程和子线程公用一个cpu,cpu会把时间划分为一个一个的时间片,如果主线程和子线程公用一个cpu,那么他们就会争抢时间片,谁抢到了时间片就在这个时间片运行,这时候,就不是并行运行了,在子线程计时的时候,就会出现时间误差。

    评论

报告相同问题?

问题事件

  • 创建了问题 11月3日

悬赏问题

  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题