my_thread_global_end线程没有退出,错误?

时间:2010-01-15 12:37:16

标签: c++ mysql multithreading macos

我正在使用MySQL c ++连接器(1.0.5),最近我将get_driver_instance()和connect()方法移动到辅助线程然后我得到以下错误。

  

my_thread_global_end()出错:1个线程没有退出

谷歌搜索后我发现mysql线程没有退出。 c ++包装器中有一个方法可以进行清理吗?

4 个答案:

答案 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)

其他信息:

http://forums.mysql.com/read.php?37,565890,565890及其中的链接。