Russian Qt Forum
Июля 04, 2025, 12:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

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

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

Сообщений: 5877


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


Просмотр профиля 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

Сообщений: 5877


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


Просмотр профиля 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

Сообщений: 5877


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


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

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

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

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


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