Потоки my_thread_global_end не закрылись, ошибка? - PullRequest
4 голосов
/ 15 января 2010

Я использую коннектор MySQL c ++ (1.0.5), недавно я переместил методы get_driver_instance () и connect () во вторичный поток, после чего я получаю ошибку ниже.

Ошибка в my_thread_global_end (): 1 поток не завершился

После поиска в Google я обнаружил, что поток mysql не завершается. Есть ли в оболочке c ++ метод для очистки?

Ответы [ 4 ]

8 голосов
/ 18 января 2010

После поиска в Google я узнал, что mysql_thread_end () решит проблему. Как бы то ни было, я связывался с libmysqlclient.a, поэтому включал файл mysql.h и вызывал mysql_thread_end перед выходом из вторичного потока, теперь проблема решена.

4 голосов
/ 17 июня 2015

Если вы используете MySQL Connector / 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(), у меня сейчас не было ошибки сегментации.

1 голос
/ 09 сентября 2014

При использовании 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
0 голосов
/ 11 ноября 2012

Дополнительная информация:

http://forums.mysql.com/read.php?37,565890,565890 и ссылки в нем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...