我创建连接时线程是否应该运行?

时间:2012-03-14 08:51:11

标签: database multithreading qt qthread

class Worker : public QThread
{
    Q_OBJECT

public:
   Worker()
   {
      // Here?
      QSqlDatabase::addDatabase("QSQLITE", "connectionName");

      ...
   }

   void Worker::run()
   {
      // Or here?
      QSqlDatabase::addDatabase("QSQLITE", "connectionName");

      ...
   }

  ...
};

Threads and the SQL Module

  

连接只能在创建它的线程中使用。   在线程之间移动连接或从中创建查询   不支持不同的线程。另外,第三方   QSqlDrivers使用的库可以对其施加进一步的限制   在多线程程序中使用SQL模块。查阅手册   数据库客户端以获取更多信息

我探索了一些相关的Qt类,我发现没有与线程和数据库连接相关的代码。似乎Qt将这项工作留给了数据库驱动程序,因为 不支持在线程之间移动连接或从其他线程创建查询。

我认为,如果我们不同时使用两个线程的连接,那么创建(和使用)连接的位置和时间并不重要。

  1. 添加连接时线程是否应该运行?
  2. 我们实际上是否必须仅在创建它的线程中使用连接?

1 个答案:

答案 0 :(得分:1)

:: run方法是线程入口点。它将在新线程中执行。 QThread构造函数将在线程中被执行,其中QThread被初始化并启动。因此,如果你要使用数据库对象IN创建的线程,那么你确保它将在这个新线程中被调用