crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

noneim
  опции профиля:
сообщение 8.6.2010, 14:22
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 8.6.2010
Пользователь №: 1792

Спасибо сказали: 0 раз(а)




Репутация:   0  


На данный момент есть программа, использующая подключение к БД sqlite:
Инициализация:
    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(path);
    if (!db.open())
    {
        return false;
    }


Далее в разных потоках:
    QSqlQuery query = QSqlQuery(db);
    query.prepare("INSERT INTO ip_list (ip, host, vps, assigned) "
                "VALUES (?, ?, ?, ?)");
        query.addBindValue(new_ip->ip);
        query.addBindValue(new_ip->host);
        query.addBindValue(new_ip->vps);
        query.addBindValue(new_ip->assigned);
        query.exec();


Но недавно прочитал , что оказывается так нельзя делать.
Хотя вроде бы тестил и под windows и под Linux, работало без багов.
Интересует надежность такого применения, на данных момент демон нормально держит uptime несколько дней, но вдруг возникнут какие-нибудь неожиданные баги?


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
FireBlack
  опции профиля:
сообщение 16.12.2014, 7:12
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 38
Регистрация: 17.10.2010
Из: г.Пенза
Пользователь №: 2121

Спасибо сказали: 13 раз(а)




Репутация:   1  


Недавно споткнулся о грабли многопоточности и QSQLite. Сначала не обратил внимание на документацию и использовал одно подключение QSqlDatabase в нескольких потоках. В результате приложение падало с "unhandled exception" то в qsqlite.dll, то в ntdll.dll. Причем могло упасть как через 10 минут стресс-теста, так и через 2 часа.
Проблему решил с помощью QSqlDatabase::​cloneDatabase, выдавая каждому потоку свое подключение к базе. Чтобы избежать ошибки "database is locked" работу с SQL обвернул в мьютекс.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 9.6.2025, 21:17