如何减少我的应用程序的 CPU 使用率?
How can I reduce the CPU usage of my application?
我的应用程序涉及备份用户设置的某些 sqlite 数据库。此备份基于某些条件。因此,为了做到这一点,我使用了一个工作对象(QThread 上的运行)检查条件是否匹配。如果条件匹配,我将进行备份。我的问题是,我已经检查了任务管理器,我的应用程序总是至少使用 25%(因为线程是 运行)。如果我禁用自动备份,它会恢复正常。我做错了什么或者这正常吗?请任何人告诉我如何保持 cpu 使用率低?下面是我的自动备份线程代码。
void Automatic_Backup_Logic::Thread_Run()
{
QSettings settings(ORGANISATION, APPLICATION_NAME);
while(!m_Stop){
// First check the backup type
int backup_type = settings.value(BACKUP_TYPE).toInt();
QTime BackupTime = qvariant_cast<QTime>(settings.value(BACKUP_TIME));
// Check for backup time; if it's in range only then do backup
if(!Check_Backup_Time(BackupTime)){
continue;
}
switch (backup_type)
{
case BACKUP_TYPE_MANUAL:
// do nothing here
continue;
case BACKUP_TYPE_DAILY:
Backup_Daily();
break;
case BACKUP_TYPE_WEEKLY:
Backup_Weekly();
break;
case BACKUP_TYPE_MONTHLY:
Backup_Monthly();
break;
case BACKUP_TYPE_YEARLY:
Backup_Yearly();
break;
default:
break;
}
// Wait for the current backup minute to pass by to avoid multiple copies
QTime t1 = qvariant_cast<QTime> (settings.value(BACKUP_TIME));
while(t1.minute()==QTime::currentTime().minute()){
if(m_Stop)
return;
QCoreApplication::processEvents();
}
}
}
PS:我是运行这个线程的标准Qt程序,它正在创建一个工作线程并使用moveToThread()函数
正如评论中所建议的那样,我在线程中设置了延迟,现在一切都按预期进行。谢谢大家
已编辑代码
// Check for backup time; if it's in range only then do backup
while(!Check_Backup_Time(BackupTime) && !m_Stop){
QThread::sleep(1);
BackupTime = qvariant_cast<QTime>(settings.value(BACKUP_TIME));
}
解决这个问题的一个干净的方法是利用 Qt 的 signal/slot 机制。
只需设置一个带有备用插槽的 QTimer
with the remaining time to backup and connect its timeout()
信号,例如:
class Automatic_Backup_Logic {
public:
Automatic_Backup_Logic() {
connect(&mBackupTimer, &QTimer::timeout, this, &Automatic_Backup_Logic::performBackup);
}
void scheduleBackup(QTime backupTime) {
int millisRemaining = getTimeRemaining(backupTime);
mBackupTimer.singleShot(millisRemaining);
}
private slots:
void performBackup() {
}
private:
QTimer mBackupTimer;
}
我的应用程序涉及备份用户设置的某些 sqlite 数据库。此备份基于某些条件。因此,为了做到这一点,我使用了一个工作对象(QThread 上的运行)检查条件是否匹配。如果条件匹配,我将进行备份。我的问题是,我已经检查了任务管理器,我的应用程序总是至少使用 25%(因为线程是 运行)。如果我禁用自动备份,它会恢复正常。我做错了什么或者这正常吗?请任何人告诉我如何保持 cpu 使用率低?下面是我的自动备份线程代码。
void Automatic_Backup_Logic::Thread_Run()
{
QSettings settings(ORGANISATION, APPLICATION_NAME);
while(!m_Stop){
// First check the backup type
int backup_type = settings.value(BACKUP_TYPE).toInt();
QTime BackupTime = qvariant_cast<QTime>(settings.value(BACKUP_TIME));
// Check for backup time; if it's in range only then do backup
if(!Check_Backup_Time(BackupTime)){
continue;
}
switch (backup_type)
{
case BACKUP_TYPE_MANUAL:
// do nothing here
continue;
case BACKUP_TYPE_DAILY:
Backup_Daily();
break;
case BACKUP_TYPE_WEEKLY:
Backup_Weekly();
break;
case BACKUP_TYPE_MONTHLY:
Backup_Monthly();
break;
case BACKUP_TYPE_YEARLY:
Backup_Yearly();
break;
default:
break;
}
// Wait for the current backup minute to pass by to avoid multiple copies
QTime t1 = qvariant_cast<QTime> (settings.value(BACKUP_TIME));
while(t1.minute()==QTime::currentTime().minute()){
if(m_Stop)
return;
QCoreApplication::processEvents();
}
}
}
PS:我是运行这个线程的标准Qt程序,它正在创建一个工作线程并使用moveToThread()函数
正如评论中所建议的那样,我在线程中设置了延迟,现在一切都按预期进行。谢谢大家
已编辑代码
// Check for backup time; if it's in range only then do backup
while(!Check_Backup_Time(BackupTime) && !m_Stop){
QThread::sleep(1);
BackupTime = qvariant_cast<QTime>(settings.value(BACKUP_TIME));
}
解决这个问题的一个干净的方法是利用 Qt 的 signal/slot 机制。
只需设置一个带有备用插槽的 QTimer
with the remaining time to backup and connect its timeout()
信号,例如:
class Automatic_Backup_Logic {
public:
Automatic_Backup_Logic() {
connect(&mBackupTimer, &QTimer::timeout, this, &Automatic_Backup_Logic::performBackup);
}
void scheduleBackup(QTime backupTime) {
int millisRemaining = getTimeRemaining(backupTime);
mBackupTimer.singleShot(millisRemaining);
}
private slots:
void performBackup() {
}
private:
QTimer mBackupTimer;
}