我正在使用MySQL的c + +連接器(1.0.5),最近我將get_driver_instance()和connect()方法移動到輔助線程,然後我得到下面的錯誤。my_thread_global_end線程沒有退出,錯誤?
錯誤my_thread_global_end():1個線程沒有退出
谷歌上搜索之後我發現,MySQL的線程不會退出。有沒有在C++包裝的方法來清理?
我正在使用MySQL的c + +連接器(1.0.5),最近我將get_driver_instance()和connect()方法移動到輔助線程,然後我得到下面的錯誤。my_thread_global_end線程沒有退出,錯誤?
錯誤my_thread_global_end():1個線程沒有退出
谷歌上搜索之後我發現,MySQL的線程不會退出。有沒有在C++包裝的方法來清理?
谷歌搜索後,我才知道()將解決問題。任何我連接到libmysqlclient.a的方式都包含mysql.h文件,並在退出輔助線程之前調用mysql_thread_end,現在問題已解決。
附加信息:
當使用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 exit
如果使用MySQL連接/ C++使用線程,你必須內sql::Driver::threadInit()
和sql::Driver::threadEnd()
封裝你的mysql-一部分。
我發現了另一個類似的問題here。
在你使用連接器的任何其他功能的線程裏面,你可以寫類似
sql::Driver *driver = get_driver_instance(); // should be synchronized
driver->threadInit();
和線程停止過,但所有其他MySQL-的東西后,你可以寫somethink像
driver->threadEnd();
似乎get_driver_instance()
不是線程安全的。如果我不同步,有時會出現段錯誤。在我的情況下,我在兩次測試中的大約一次初始化時出現了分段錯誤。由於我正在將呼叫同步到get_driver_instance()
,因此我現在沒有分段錯誤。
哇!有同樣的錯誤。但爲什麼它會上升?有沒有「真實」或「正確」的方法來避免這種錯誤? – troyane 2013-04-03 20:04:55
在我的書架中找不到此功能。我使用cppconn。這個功能在哪裏?謝謝。 – NoviceCai 2014-05-08 06:24:06