我有一个C++程序,该程序初始化MySQL数据库,然后用线程加载GUI,该线程一次访问数据库。
当我从主线程调用mysql_query()
函数时,它可以正常工作,但是当我从新线程调用时,它会在段错误时崩溃。
这段代码工作正常(在主线程中调用了MySQL函数):
updateQueryEngines();
这段代码崩溃了(在不同的线程中调用了MySQL函数):
std::thread *my_thread = new std::thread(&MainWindow::updateQueryEngines, this);
任何的想法?
最佳答案
好的,我有一个答案,我认为将其发布在这里很重要,这样其他人就不会像我一样花一整天的时间。
当您启动一个新线程来访问mysqlt API的 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);