Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL C API:从不同线程运行查询时出现分段错误 我有一个C++程序,启动MySQL数据库,然后用线程加载GUI,一次访问数据库。_C++_Mysql_C_Multithreading - Fatal编程技术网

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

MySQL C API:从不同线程运行查询时出现分段错误 我有一个C++程序,启动MySQL数据库,然后用线程加载GUI,一次访问数据库。,c++,mysql,c,multithreading,C++,Mysql,C,Multithreading,当我从主线程调用mysql\u query()函数时,它工作得很好,但当我从新线程调用它时,它会因分段错误而崩溃 此代码工作正常(在主线程中调用MySQL函数): 此代码崩溃(MySQL函数在不同线程中调用): 有什么想法吗?好的,我有一个答案,我认为把它贴在这里很重要,这样其他人就不会像我那样花一整天的时间在上面了 当您启动一个访问MySQL C API的新线程时,只需在线程内调用API函数MySQL\u thread\u init()。这将解决分段故障问题: void MainWindow:

当我从主线程调用
mysql\u query()
函数时,它工作得很好,但当我从新线程调用它时,它会因分段错误而崩溃

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

此代码崩溃(MySQL函数在不同线程中调用):


有什么想法吗?

好的,我有一个答案,我认为把它贴在这里很重要,这样其他人就不会像我那样花一整天的时间在上面了

当您启动一个访问MySQL C API的新线程时,只需在线程内调用API函数
MySQL\u thread\u init()
。这将解决分段故障问题:

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

    ... rest of the code...
}
现在我可以在新线程中调用此函数,而不会出现分段错误:

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

如果init函数附带相应的“destroy”或“free”函数,则应在该函数末尾调用它。。
void MainWindow::updateQueryEngines() {
    mysql_thread_init();

    ... rest of the code...
}
std::thread *my_thread = new std::thread(&MainWindow::updateQueryEngines, this);