我使用的是MySQL c++连接器(1.0.5),最近我将get_driver_instance()和connect()方法移动到二级线程,然后得到以下错误。
My_thread_global_end()中的错误:1个线程没有退出
在googling之后,我发现mysql线程没有退出。在c++包装器中是否有一种方法可以进行清理?
发布于 2010-01-18 13:35:35
在googling之后,我了解到结束()将解决这个问题。无论我如何链接libmysqlclient.a,其中包括mysql.h文件,并在退出辅助线程之前调用mysql_thread_end,现在这个问题已经解决了。
发布于 2015-06-16 23:54:33
如果在线程中使用MySQL连接器/C++,则必须将mysql封装在sql::Driver::threadInit()和sql::Driver::threadEnd()中。
我发现了另一个类似的问题,这里。
在线程中使用连接器的任何其他功能之前,可以编写如下内容
sql::Driver *driver = get_driver_instance(); // should be synchronized
driver->threadInit();在线程停止之前,但是在完成所有其他mysql内容之后,您可以编写一些类似于
driver->threadEnd();get_driver_instance()似乎也不是线程安全的。如果不同步,有时会出现分段错误。在我的例子中,我有一个分割错误,而初始化在大约两个测试之一。因为我正在同步对get_driver_instance()的调用,所以我现在没有分段错误。
发布于 2014-09-09 07:23:53
当使用C++/连接器时,执行等效的操作:
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 exithttps://stackoverflow.com/questions/2071449
复制相似问题