【问题标题】:MySQL C connector: executing queries from separate threadsMySQL C 连接器:从单独的线程执行查询
【发布时间】:2013-04-15 10:38:39
【问题描述】:

我在应用程序的主线程中创建到服务器的连接:

ClassA::ClassA(void)
{
    mpMySQL = mysql_init(NULL);

    if (!mysql_thread_safe())
    {
        // Error;
    }
}

稍后连接到服务器:

void ClassA::OpenConnection(/*inParams*/)
{
    .....
    mysql_real_connect(mpMySQL, /*inParams*/);
    .....
}

现在我使用 mpMySQL 来执行查询:

MyRes ClassA::SQLQuery(MyString inQuery)
{
   ...
    if (!mysql_real_query(mpMySQL, inQuery, inQuery.length()))
    {
    ...
    }
}

虽然应用在主线程中使用 ClassA 的对象 - 一切正常。

但是如果方法

A->SQLQuery()

从线程调用 - 应用程序在执行时崩溃

mysql_real_query()

======

据我了解,这是因为 mpMySQL 在一个线程中初始化并在另一个线程中使用。我说的对吗?

有办法做到这一点吗?或者我应该在每个单独的线程中初始化 MYSQL 结构(并建立单独的连接)来执行查询?

【问题讨论】:

    标签: mysql-connector mariadb mysql


    【解决方案1】:

    mysql_thread_init() 是诀窍。您需要为使用 C API 的每个线程执行它。 mysql_init() 隐式执行。

    【讨论】:

      猜你喜欢
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-23
      • 2015-02-06
      相关资源
      最近更新 更多