🐞 fix(程序退出): 调整线程退出逻辑

退出时结束数据库的操作
This commit is contained in:
huheng@kylinos.cn 2023-07-14 17:09:33 +08:00
parent 2429fe8ecd
commit a4c680b343
5 changed files with 37 additions and 9 deletions

View File

@ -69,6 +69,9 @@ int FileDataBase::insertData(const QList<FileInfo> &fileinfoList)
int count = 0;
for (FileInfo fileinfo : fileinfoList) {
if (m_isStop) {
return count;
}
if (insertData(fileinfo)) {
// 成功更新数据
count++;
@ -89,6 +92,9 @@ int FileDataBase::removeData(const QStringList &filePathList)
QSqlQuery query(m_DataBase);
int count = 0;
for (QString path : dataBaseList) {
if (m_isStop) {
return count;
}
if (!filePathList.contains(path)) {
// 数据库中的数据本地不能存在,删除该数据
QString sqlStr = QString("delete from %1 where path = '%2'").arg(TABLE_NAME).arg(path);
@ -109,6 +115,11 @@ int FileDataBase::removeData(const QStringList &filePathList)
return count;
}
void FileDataBase::stopRun()
{
m_isStop = true;
}
bool FileDataBase::initTable()
{
if (!m_DataBase.open()) {
@ -230,6 +241,9 @@ FileDataBase::DataStatus FileDataBase::getDataStatus(const FileInfo &fileinfo)
}
if (query.exec()) {
while (query.next()) {
if (m_isStop) {
return DataStatus::NOUPDATE;
}
if (fileinfo.getPath() == query.value(HEADER_NAME::PATH).toString()) {
if (fileinfo.size() == query.value(HEADER_NAME::SIZE).toInt() &&
fileinfo.dateTime() == query.value(HEADER_NAME::DATE).toString()) {
@ -276,6 +290,9 @@ QStringList FileDataBase::getDataPathList()
}
while (query.next()) {
if (m_isStop) {
return filePathList;
}
filePathList.append(query.value(HEADER_NAME::PATH).toString());
}
return filePathList;

View File

@ -21,11 +21,13 @@ public:
// 删除数据库中filePathList没有的数据 返回删除条数
int removeData(const QStringList &filePathList);
void stopRun();
private:
enum DataStatus {
NEEDUPDATE = 0, // 该行数据需要更新
NEEDINSTER = 1, // 需要插入该数据
NOUPDATE = 2, // 不需要更新
NEEDUPDATE = 0, // 该行数据需要更新
NEEDINSTER = 1, // 需要插入该数据
NOUPDATE = 2, // 不需要更新
};
Q_ENUM(DataStatus)
@ -47,8 +49,9 @@ private:
bool update(const FileInfo &fileinfo);
private:
QSqlDatabase m_DataBase; // 数据库对象
QSqlDatabase m_DataBase; // 数据库对象
QMutex m_mutex;
bool m_isStop = false;
};
#endif // FILEDATABASE_H
#endif // FILEDATABASE_H

View File

@ -26,6 +26,11 @@ DirManager::~DirManager()
}
}
void DirManager::stopRun()
{
m_dataBase->stopRun();
}
void DirManager::run()
{
QStringList list;

View File

@ -16,6 +16,8 @@ public:
DirManager();
~DirManager();
void stopRun();
protected:
void run();
@ -25,12 +27,12 @@ private:
private:
FileDataBase *m_dataBase = nullptr;
QList<FileInfo> m_fileinfoList; // 文件信息列表,保存遍历的文件信息
QStringList m_filePathList; // 单独保存所以文件路径,用于对比删除数据库中不存在的文件信息
QList<FileInfo> m_fileinfoList; // 文件信息列表,保存遍历的文件信息
QStringList m_filePathList; // 单独保存所以文件路径,用于对比删除数据库中不存在的文件信息
Q_SIGNALS:
void finish(); // 处理完成信号
void finish(); // 处理完成信号
public Q_SLOTS:
};
#endif // DIRMANAGER_H
#endif // DIRMANAGER_H

View File

@ -308,6 +308,7 @@ void MainWindow::deleterService()
}
if (m_dirManager != nullptr) {
qInfo() << "close dir manage!";
m_dirManager->stopRun();
m_dirManager->requestInterruption();
m_dirManager->quit();
m_dirManager->wait();