2014-08-27 38 views
2

我有一个C++程序,它启动一个MySQL数据库,然后用线程加载GUI,一次只能访问一次数据库。MySQL C API:从不同线程运行查询时出现分段错误

当我从主线程调用mysql_query()函数时,它运行良好,但是当我从一个新线程调用它时 - 它在分段错误上崩溃。

此代码工作正常(MySQL的函数被调用在主线程):

updateQueryEngines(); 

此代码崩溃(MySQL的功能在不同的线程中调用):

std::thread *my_thread = new std::thread(&MainWindow::updateQueryEngines, this); 

任何想法?

回答

0

好的,我有一个答案,我认为在这里发布它很重要,所以其他人不会像我一样花上一整天的时间。

当您启动一个访问MySQL C API的新线程时,只需在线程中调用API函数mysql_thread_init()即可。这将解决分段错误问题:

void MainWindow::updateQueryEngines() { 
    mysql_thread_init(); 

    ... rest of the code... 
} 

现在我可以调用这个函数在一个新的线程,没有得到段故障:

std::thread *my_thread = new std::thread(&MainWindow::updateQueryEngines, this); 
+1

如果初始化函数带有一个相应的“消灭”或“免费”功能,您应该在该功能结束时调用它。 – Brandon 2014-08-27 08:18:45

相关问题