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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Зависание приложения при потери связи с mysql сервером  (Прочитано 4439 раз)
admsasha
Гость
« : Ноябрь 21, 2011, 02:46 »

Есть приложение, которое каждую секунду выводит данные из mysql. Если выключить mysql сервер, то всё приложение становится недоступным (в диспетчере "не отвечает"). Как построить логику, чтобы при отсутствии связи всё приложение не зависало, а я мог просто вывести сообщение, "потеря связи с сервером, идет попытка подключения". Причем мог бы спокойно сворачивать, разворачивать окно.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Ноябрь 21, 2011, 08:52 »

Покажи код, где ты получаешь инфу.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
admsasha
Гость
« Ответ #2 : Ноябрь 21, 2011, 10:15 »

в main
Цитировать
    QSqlDatabase db =  QSqlDatabase::addDatabase("QMYSQL","mydb");
    db.setDatabaseName("mydb");
    db.setUserName("myuser");
    db.setPassword("mypassword");
    db.setHostName("10.10.10.10");
    if( !db.open() ){
        qDebug() << db.lastError();
    }


Функция срабатывает по таймауту QTimer
Цитировать
void myFrom::refresh(){
  QSqlQuery query(QSqlDatabase::database("mydb"));  // тут как я понял происходит зависание

   QString sql="SELECT p1,p2 from table";
    if(!query.exec(sql)){
        QMessageBox::critical(this, QObject::tr("SQL Error"), query.lastError().text());
        return;
    }
    while (query.next()) {
           // тут пишу в нужные поля результат
    }

}

Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Ноябрь 21, 2011, 10:18 »

При ошибке ставишь таймеру больший таймаут.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
admsasha
Гость
« Ответ #4 : Ноябрь 21, 2011, 10:26 »

Это равнозначно, что и сразу закрыть программу. Т.к. после восстановления связи, нужно либо долго ждать когда произойдет timeout, либо перезагрузить её, что будет быстрее.

« Последнее редактирование: Ноябрь 21, 2011, 10:38 от admsasha » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Ноябрь 21, 2011, 10:28 »

Можно остановить таймер и в диалоге попросить нажать кнопку для реконнекта.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
admsasha
Гость
« Ответ #6 : Ноябрь 21, 2011, 10:38 »

Ну так видимо и придется.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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