gpt4 book ai didi

c++ - Qt 多线程

转载 作者:行者123 更新时间:2023-11-28 08:12:43 27 4
gpt4 key购买 nike

我正在尝试从文本文件中读取数据并将 token 保存在 Windows 上运行的 SQLite 数据库中文件大小约为 300MB,问题是我还没有使用线程,应用程序崩溃并卡在“未响应”消息中这是我的代码

QDir dir(ui->lineEdit->text());
if(dir.exists() && ui->lineEdit->text()!=""){
CreateTables();

dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
dir.setSorting(QDir::Size | QDir::Reversed);

QFileInfoList list = dir.entryInfoList();
for (int i = 0; i < list.size(); ++i) {
QFileInfo fileInfo = list.at(i);
QFile file(ui->lineEdit->text()+"/"+ fileInfo.fileName());

if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
QSqlQuery qrry;
qrry.prepare( "INSERT INTO documents (path) VALUES ('"+ui->lineEdit->text()+"/"+ fileInfo.fileName()+"')" );
qrry.exec();

QString line;
QTextStream in(&file);
int lineCount=0;
while (!in.atEnd()) {

line = in.readLine();
lineCount++;
QRegExp rx("(\\ |\\,|\\.|\\:|\\t)");
QStringList line_tokens = line.split(rx);

for(int i=0;i<line_tokens.length();i++){
if(line_tokens[i].length()>3){
QSqlQuery qry;
qry.prepare( "INSERT INTO tokens (token,path,line) VALUES ('"+line_tokens[i]+"', '"+ui->lineEdit->text()+"/"+ fileInfo.fileName()+"','"+QString::number(lineCount)+"')" );
qry.exec();
}
}
}
}
else{
QMessageBox::information(this,"File Read Error","Couldn't Open File, Please Make Sure That This File Is Accessable And Readable !");
}
std::cout << std::endl;
}
}
else{
QMessageBox::critical(this,"Directory choosen is Not Valid","Please Make Sure That You Have Choosen A Valid Directory!");
}

它适用于小文件大小,但当涉及大量数据时,它会给出“无响应”消息

线程会不会使应用程序崩溃??以及我如何实现线程来为超过 20 个 15 MB 的文件完成这项工作

最佳答案

首先,您可以简单地...等到它处理完所有数据。如果你应该只运行这个程序一次,没关系。

那么,你不应该生成这样的数据库请求流。运行一个大的插入比运行许多小的要好得多。您可以使用 batch 执行。

那么,可能没有理由尝试并行写入 Db。我认为,它足够聪明,可以有效地管理写作。

但值得并行解析。这里最好的解决方案是使用 QtConcurrent 框架。它正是为此类任务而设计的。

关于c++ - Qt 多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8593719/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com