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 が 1 つのスレッドで初期化され、別のスレッドで使用されたために発生します。私は正しいですか?

このトリックを行う方法はありますか?または、クエリを実行するために、分離されたすべてのスレッドで MYSQL 構造を初期化 (および個別の接続を作成) する必要がありますか?

4

1 に答える 1