Название: [Решено]Можно ли убить процесс QSqlDatabase::open()? Отправлено: soiam от Май 23, 2013, 13:45 Добрый день.
Осуществляется подключение к удаленной БД mysql Код: remote_db.setDatabaseName(""); Пользователь ПО не хочет ждать это время, хочет нажать "Отмена подключения", чтобы подключение перестало устанавливаться. Что можно сделать для этого? Название: Re: Можно ли убить процесс QSqlDatabase::open()? Отправлено: Serr500 от Май 23, 2013, 14:09 Вывести подключение в отдельный поток. Он не будет тормозить ГУИ и его можно будет убить в любой момент. Но лучше не убивать, а дождаться ответа в фоновом режиме. ;)
Название: Re: Можно ли убить процесс QSqlDatabase::open()? Отправлено: soiam от Май 23, 2013, 14:14 Подключение в отдельном от gui потоке. Но как мне его убить? вроде как объект же нельзя удалять во время вызова функции этого объекта.
Нюанс в том, что эта же программа у меня и для андроида, а open там в таком случае подвисает вообще намертво, а не на 30 секунд, как в windows и linux Название: Re: Можно ли убить процесс QSqlDatabase::open()? Отправлено: Kurles от Май 23, 2013, 22:02 Код .Но это плохой метод, надо дожидаться ответа от open(). Точно уверен, что подключение в другом потоке создается? Название: Re: Можно ли убить процесс QSqlDatabase::open()? Отправлено: soiam от Май 24, 2013, 09:36 Kurles, да, подключение и запросы передаются с помощью сигналов с одного потока в другой.
terminate действительно прибивает поток, немного пришлось повозиться с конструктором и деструктором БД в потоке, но в принципе теперь для пользователя всё работает, как надо. Правда, с точки зрения программиста уж очень криво... Возможна утечка памяти, смотря как драйвер mysql написан, но в принципе это исключительный случай Спасибо |