2013-04-15 51 views
0

我創建應用程序的主線程服務器的連接:MySQL的C類接口:執行從單獨的線程查詢

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中的主體對象d - 一切正常。

但是,如果方法

A->SQLQuery() 

從線程調用 - 在執行應用程序崩潰

mysql_real_query() 

======

據我瞭解這種情況是因爲mpMySQL在一個線程中初始化,並在另一個線程中使用。我對嗎?

是否要這樣做?或者我應該在每個分離的線程中初始化MYSQL結構(並建立單獨的連接)來執行查詢?

回答

0

mysql_thread_init()是訣竅。您需要爲使用C API的每個線程執行它。 mysql_init()隱含地執行它。