我正在使用MySQL c ++连接器(1.0.5),最近我将get_driver_instance()和connect()方法移动到辅助线程然后我得到以下错误。
my_thread_global_end()出错:1个线程没有退出
谷歌搜索后我发现mysql线程没有退出。 c ++包装器中有一个方法可以进行清理吗?
答案 0 :(得分:8)
谷歌搜索后,我发现mysql_thread_end()将解决问题。我在链接libmysqlclient.a的任何方式都包含了mysql.h文件并在退出辅助线程之前调用了mysql_thread_end,现在问题就解决了。
答案 1 :(得分:4)
如果您将 MySQL Connector / C ++ 与线程一起使用,则必须将mysql-part封装在sql::Driver::threadInit()
和sql::Driver::threadEnd()
中。
我找到了另一个类似的问题here。
在线程中使用连接器的任何其他功能之前,您可以编写类似
的内容sql::Driver *driver = get_driver_instance(); // should be synchronized
driver->threadInit();
在线程停止之前,但在所有其他mysql之后,你可以写一些像
这样的想法driver->threadEnd();
get_driver_instance()
似乎也不是线程安全的。如果我不同步它,有时会出现分段错误。在我的情况下,我在大约两次测试中的一次初始化时出现了分段错误。由于我正在同步对get_driver_instance()
的调用,我现在没有分段错误。
答案 2 :(得分:1)
使用C ++ / connector时,请执行以下操作:
sql::Driver* driver = get_driver_instance();
:
:
driver->threadEnd(); // must be done or sql thread leaks on app exit with:
// Error in my_thread_global_end(): 1 threads didn't exit
答案 3 :(得分:-1)
其他信息: