Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Boser от Март 11, 2013, 22:56



Название: QSqlDatabase::addDatabase, проблема при компиляции релиза
Отправлено: 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");
------------
В этом проекте с тредами непосредственных действий не провожу, так что явно это особенности вызова функции.

Ткните носом: Что я упускаю? ???


Название: Re: QSqlDatabase::addDatabase, проблема при компиляции релиза
Отправлено: carrygun от Март 12, 2013, 05:10
Чистить проект и пересобирать пробовали?


Название: Re: QSqlDatabase::addDatabase, проблема при компиляции релиза
Отправлено: Bepec от Март 12, 2013, 07:01
Нет кода, нет проблемы. Точнее я не вижу проблемы :D Помочь не могу.

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


Название: Re: QSqlDatabase::addDatabase, проблема при компиляции релиза
Отправлено: carrygun от Март 12, 2013, 07:53
PS moveToThread вы где-то всё таки вызываете. Мб и невольно :D

Не обязательно. Я несколько раз натыкался на проблемы с тредами в приложениях, где эти самые треды и не используются. Обычно очистка и пересборка помогают. Или кумеки хватает.


Название: Re: QSqlDatabase::addDatabase, проблема при компиляции релиза
Отправлено: Boser от Март 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 вы где-то всё таки вызываете. Мб и невольно :D
Ну, я согласен что наверняка где-то косячу.
Может, код выше даст ответ, который мне не виден?  :-[


Название: Re: QSqlDatabase::addDatabase, проблема при компиляции релиза
Отправлено: Bepec от Март 12, 2013, 22:51
завтра (утром, а не через 9 минут) проверю :D


Название: Re: QSqlDatabase::addDatabase, проблема при компиляции релиза
Отправлено: carrygun от Март 13, 2013, 05:36
Я, возможно, не понимаю терминологии. Чистить проект - это в смысле код пересмотреть или специфическая операция в системе?

Если пишешь в креаторе, то в верхнем меню "Сборка" пункты "Очистить все" и "Пересобрать все".


Название: Re: QSqlDatabase::addDatabase, проблема при компиляции релиза
Отправлено: Boser от Март 13, 2013, 09:01
Если пишешь в креаторе, то в верхнем меню "Сборка" пункты "Очистить все" и "Пересобрать все".
Не помогает.


Название: Re: QSqlDatabase::addDatabase, проблема при компиляции релиза
Отправлено: Bepec от Март 13, 2013, 09:03
Код в моей VS 2008 спокойно проходит компиляцию. Видимо у вас или проблема в подключаемых либках, либо какие то глобальные настройки.

PS а мб и креатор глюкавый :D


Название: Re: QSqlDatabase::addDatabase, проблема при компиляции релиза
Отправлено: carrygun от Март 13, 2013, 12:31
А кутэшный MySQL модуль для релиза то собран?


Название: Re: QSqlDatabase::addDatabase, проблема при компиляции релиза
Отправлено: Boser от Март 13, 2013, 12:46
Код в моей VS 2008 спокойно проходит компиляцию. Видимо у вас или проблема в подключаемых либках, либо какие то глобальные настройки.

PS а мб и креатор глюкавый :D
Не утешительно. :-\
1. Есть мысли, что за глобальные настройки могут влиять? ОС или IDE?
2. Я использовал Qt 4.8.1, а теперь попробую на 4.7.2 (доступен в Креаторе). Правильно я понимаю, что драйвер-плагин QMYSQL прийдется перекомпилировать для этого? (так просто 4.7.2 не увидел этого драйвера).


Название: Re: QSqlDatabase::addDatabase, проблема при компиляции релиза
Отправлено: Boser от Март 13, 2013, 13:01
А кутэшный MySQL модуль для релиза то собран?
при компиляции получил обе длл-ки:
qsqlmysql4.dll и qsqlmysqld4.dll
- второй корректно работает, т.к. дебаг-компиляция работаетю
- а вот релизную длл-ку  как-то можно еще проверить? На чистой машине я её так и не смог подключить ("driver not loaded" - P.S. либы по каталогам разложил, в т.ч. \sqldrivers  ;)), подумал, что проблеммы могут быть (или не быть) причиной-следствием. А как эту мысль проверить невкумекал пока.


Название: Re: QSqlDatabase::addDatabase, проблема при компиляции релиза
Отправлено: carrygun от Март 13, 2013, 13:19
Я конечно возился с мускулем, но такой проблемы не видел ни разу. Единственно что пришлось плагин пересобирать для новой версии мускуля. Ну и попробуй чтоли под версию кутэ тоже собрать. Фиг знает как там дела с плагинами.


Название: [РЕШЕНО] QSqlDatabase::addDatabase, проблема при компиляции релиза
Отправлено: Boser от Март 14, 2013, 22:19
Проблема, и даже две, решились.
Если коротко, то причина:
креатор глюкавый :D

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

Спасибо всем. Проблема решена.