Russian Qt Forum
Ноябрь 24, 2024, 10:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSqlDatabase::addDatabase, проблема при компиляции релиза  (Прочитано 6504 раз)
Boser
Гость
« : Март 11, 2013, 22:56 »

IDE QtSDK
Помогите новичку понять причину.
При компиляции проекта в Дебаг-режиме "все красиво", но если компилю релиз, то получаю следующее сообщение:
"QObject::moveToThread: Current thread (0x8923d0) is not the object's thread (0x79ebc8).
Cannot move to target thread (0x8923d0)"
каждый раз когда выполняется функция addDatabase.
-----------
Проверено в разных вариантах вызова:
1. QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", "dbconnect");
2. QSqlDatabase *db;
 db = &QSqlDatabase::addDatabase("QMYSQL","dbconnect");
3. QSqlDatabase db;
 db.addDatabase("QMYSQL","sergdbconnect");
------------
В этом проекте с тредами непосредственных действий не провожу, так что явно это особенности вызова функции.

Ткните носом: Что я упускаю? Непонимающий
« Последнее редактирование: Март 11, 2013, 23:18 от Boser » Записан
carrygun
Гость
« Ответ #1 : Март 12, 2013, 05:10 »

Чистить проект и пересобирать пробовали?
Записан
Bepec
Гость
« Ответ #2 : Март 12, 2013, 07:01 »

Нет кода, нет проблемы. Точнее я не вижу проблемы Веселый Помочь не могу.

PS moveToThread вы где-то всё таки вызываете. Мб и невольно Веселый
Записан
carrygun
Гость
« Ответ #3 : Март 12, 2013, 07:53 »

PS moveToThread вы где-то всё таки вызываете. Мб и невольно Веселый

Не обязательно. Я несколько раз натыкался на проблемы с тредами в приложениях, где эти самые треды и не используются. Обычно очистка и пересборка помогают. Или кумеки хватает.
Записан
Boser
Гость
« Ответ #4 : Март 12, 2013, 22:24 »

Чистить проект и пересобирать пробовали?
Я, возможно, не понимаю терминологии. Чистить проект - это в смысле код пересмотреть или специфическая операция в системе?
Тут дело в том, что даже следующий "куцый" код вызывает ту же проблему при компиляции релиза:
Код:
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("LOCALHOST");
    db.setDatabaseName("notification");
    db.setUserName("user");
    db.setPassword("pass");
   
    return a.exec();
}
А при компиляции дебага - проблема никак не проявляется. Все чинно.

PS moveToThread вы где-то всё таки вызываете. Мб и невольно Веселый
Ну, я согласен что наверняка где-то косячу.
Может, код выше даст ответ, который мне не виден?  Обеспокоенный
Записан
Bepec
Гость
« Ответ #5 : Март 12, 2013, 22:51 »

завтра (утром, а не через 9 минут) проверю Веселый
Записан
carrygun
Гость
« Ответ #6 : Март 13, 2013, 05:36 »

Я, возможно, не понимаю терминологии. Чистить проект - это в смысле код пересмотреть или специфическая операция в системе?

Если пишешь в креаторе, то в верхнем меню "Сборка" пункты "Очистить все" и "Пересобрать все".
Записан
Boser
Гость
« Ответ #7 : Март 13, 2013, 09:01 »

Если пишешь в креаторе, то в верхнем меню "Сборка" пункты "Очистить все" и "Пересобрать все".
Не помогает.
Записан
Bepec
Гость
« Ответ #8 : Март 13, 2013, 09:03 »

Код в моей VS 2008 спокойно проходит компиляцию. Видимо у вас или проблема в подключаемых либках, либо какие то глобальные настройки.

PS а мб и креатор глюкавый Веселый
Записан
carrygun
Гость
« Ответ #9 : Март 13, 2013, 12:31 »

А кутэшный MySQL модуль для релиза то собран?
Записан
Boser
Гость
« Ответ #10 : Март 13, 2013, 12:46 »

Код в моей VS 2008 спокойно проходит компиляцию. Видимо у вас или проблема в подключаемых либках, либо какие то глобальные настройки.

PS а мб и креатор глюкавый Веселый
Не утешительно. В замешательстве
1. Есть мысли, что за глобальные настройки могут влиять? ОС или IDE?
2. Я использовал Qt 4.8.1, а теперь попробую на 4.7.2 (доступен в Креаторе). Правильно я понимаю, что драйвер-плагин QMYSQL прийдется перекомпилировать для этого? (так просто 4.7.2 не увидел этого драйвера).
Записан
Boser
Гость
« Ответ #11 : Март 13, 2013, 13:01 »

А кутэшный MySQL модуль для релиза то собран?
при компиляции получил обе длл-ки:
qsqlmysql4.dll и qsqlmysqld4.dll
- второй корректно работает, т.к. дебаг-компиляция работаетю
- а вот релизную длл-ку  как-то можно еще проверить? На чистой машине я её так и не смог подключить ("driver not loaded" - P.S. либы по каталогам разложил, в т.ч. \sqldrivers  Подмигивающий), подумал, что проблеммы могут быть (или не быть) причиной-следствием. А как эту мысль проверить невкумекал пока.
Записан
carrygun
Гость
« Ответ #12 : Март 13, 2013, 13:19 »

Я конечно возился с мускулем, но такой проблемы не видел ни разу. Единственно что пришлось плагин пересобирать для новой версии мускуля. Ну и попробуй чтоли под версию кутэ тоже собрать. Фиг знает как там дела с плагинами.
Записан
Boser
Гость
« Ответ #13 : Март 14, 2013, 22:19 »

Проблема, и даже две, решились.
Если коротко, то причина:
креатор глюкавый Веселый

Если инетесно, то подробнее: решил я QMYSQL-собрать для MySQL5.5 32bit, а перед этим перекомпилировал Qt4.8.1 - думаю это  и был решающий момент, т.к. в результате:
1. На удаленной "чистой" машине с 32-битным MySQL серверная релизная часть моего проекта заработала "как часы" без единого Варнинга после замены драйвера на свежесобранный qsqlmysql4.dll (само приложение я даже не перекомпилировал).
2. На машине с Креатором и 64-битным MySQL (и старыми неперекомпилированными драйверами qsqlmysql4.dll) релиз скомпилировался, выдал тот же варнинг про "QObject::moveToThread....", но при этом все отработал как нужно.
3. И, что для меня странно, но факт,  когда я заменил драйвер qsqlmysql4.dll на свежий "32-битный", то и на локальной машине релиз отработал все без варнингов и ошибок.  А я то считал, что драйвер необходимо компилировать каждый раз под разные версии и разрядность мускула - приятная неожиданность.

Спасибо всем. Проблема решена.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.135 секунд. Запросов: 21.