QT开发中文网

void CDiskCapacityManage::slotDistStatus() { if (!isOpenDiskMonitor) return; QString Path = strDisk; //!< 默认监控G盘 double dTotalBytes,dFreeBytes; getDiskSpace(Path,dTotalBytes,dFreeBytes); qInfo()

要在这个函数里延迟24小时并且保持程序响应,你可以使用Qt的QTimer::singleShot()函数。该函数允许你在指定的时间间隔后执行一次性操作。

首先,在类的头文件中添加一个私有成员变量:

private:
    QTimer* timer;

然后,在类的构造函数中初始化定时器:

CDiskCapacityManage::CDiskCapacityManage()
{
    // ...
    timer = new QTimer(this);
}

接下来,在需要延迟执行的地方调用QTimer::singleShot(),设置24小时后触发槽函数:

void CDiskCapacityManage::slotDistStatus()
{
    if (!isOpenDiskMonitor)
        return;

    QString Path = strDisk; //!< 默认监控G盘
    double dTotalBytes,dFreeBytes;
    getDiskSpace(Path,dTotalBytes,dFreeBytes);
    
    qInfo()<< u8"开始扫描计算硬盘容量!";
    
    if (dFreeBytes <= capacity.toDouble()){
        emit btnOkClicked();
        return;
    }

    // 延迟24小时(24 * 60 * 60 * 1000毫秒)
    int delayDuration = 24 * 60 * 60 * 1000;
    
    // 调用单次定时器触发,设定为延迟24小时后执行slotDelayedAction()槽函数
    QTimer::singleShot(delayDuration, this, SLOT(slotDelayedAction()));
}

最后,在新添加的槽函数slotDelayedAction()中处理延迟后的操作:

void CDiskCapacityManage::slotDelayedAction()
{
    // 这里写延迟24小时后需要执行的代码
}

这样,当满足条件时,slotDistStatus()函数将在24小时后触发slotDelayedAction()槽函数。同时,由于使用了单次定时器触发,程序仍然会保持响应性。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=8343

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?