| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Qt 5.1 MYSQL Multithreading |
| Автор: becks 22.10.2013, 14:52 | ||
Добрый день. Есть MYSQL база данных, в нее идет запись из нескольких потоков. Вот основная функция записи каждого потока:
Запись обычный INSERT INTO. Запускаю несколько потоков с укладкой (укладка производится довольно быстро, данных немного), получаю: open error «Unknown MySQL server host '127.0.0.1' (0) QMYSQL: Unable to connect open error „Unknown MySQL server host '127.0.0.1' (0) QMYSQL: Unable to connect Количество таких сообщений обычно на 1 или 2 меньше количества потоков. Если запускать один поток, все работает нормально. Для других задач (не SQL) работает хоть с 10-20 потоками нормально. Win 7 64. Qt 5.1.1 MSVC2012 64. MYSQL 5.6.14.0. Таблицы — InnoDB |
| Автор: bsa 22.10.2013, 21:17 |
| becks, может у бд есть ограничение на количество одновременных подключений? |
| Автор: vinter 23.10.2013, 18:50 |
| mysql консольный тул соединяется с базой нормально? При тех же параметрах Почему грешишь на потоки? Не вижу в описании ничего потокозависимого. Попробуй создай пустой проект и присоединись к базе из него. |
| Автор: becks 23.10.2013, 23:54 | ||||||
Абсолютно нормально.
Если писать одним потоком - все работает отлично. Как только поялвляется хотя бы второй, появляются ошибки.
С этого все и начал. Работало. Потом перенес все это на потоки. И тут возникли проблемы. |
| Автор: vinter 24.10.2013, 06:41 | ||
Я так понимаю, что эта функция(insert) у тебя вызывается не один раз, а значит эта строчка не должна быть здесь. Здесь должна быть database(m_uid);, а инициализация базы для потока должна быть в едином месте. Так же проверь являются ли m_uid уникальными для каждого потока и удостоверься, что QSqlDatabase::addDatabase("QMYSQL", m_uid); происходит в отдельном потоке. |