0

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

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 结构以执行查询?

4

1 回答 1

0

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

于 2013-04-20T15:41:33.390 回答