【发布时间】:2023-08-06 02:16:01
【问题描述】:
我正在处理一个场景,我们希望在数据库表上异步执行 INSERT/DELETE 语句(这是一个即发即弃的场景)。我打算简单地用相关数据触发一个信号,并让线程的事件循环处理每个信号,类似于以下示例:
Worker *worker = new Worker;
worker->moveToThread(&workerThread);
connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater);
connect(signalSource, &SignalSource::dataReady, worker, &Worker::updateMyFancyTable);
workerThread.start();
线程应该在运行时打开自己的数据库连接。我会这样做(当然会增加错误处理):
connect(&workerThread, &QThread::started, worker, &Worker::establishDatabaseConnection);
当停止线程时,它应该完成它的工作然后关闭数据库连接。
据我了解,在线程上调用quit() 将首先处理所有剩余的信号(如果有),然后退出线程的事件循环。
在这种情况下如何正确关闭数据库连接?
- 在调用
quit()之前是否发出关闭连接的信号? - 我是否在发出
QThread::finished后调用的主线程中的插槽中关闭连接? - 还有别的吗?
【问题讨论】:
-
你真的需要关闭连接吗?另外,你不能在线程销毁时关闭它吗?
标签: qt qthread qsqldatabase