Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Соединение с БД в отдельном потоке

18K
14 октября 2006 года
maestro_ufa
11 / / 10.10.2006
Моя программка соединяется с Interbase 5. На эту процедуру почему-то уходит много времени (секунд 5-7), в течение которого программа "зависает", т.е. не обрабатываются сообщения перерисовки окна и т.д.
Чтобы бороться с этим, я решил поместить процедуру соединения к БД в отдельный поток. Создал класс, производный от TThread, и в функции Execute вызвал процедуру соединения:
 
Код:
void __fastcall CDbConnThread::Execute()
{
        Synchronize(frmDbConn->ConnectToDb);
}

Но программа так и продолжает зависать, сообщения не обрабатываются.
Как сделать так, чтобы программа во время соединения не зависала?
547
16 октября 2006 года
Hydra
488 / / 20.06.2006
Собственно убрать Synchronize, который задерживает создание виуальных зкомпонент vcl до завершения функции frmDbConn->ConnectToDb.

З.Ы. Мне огнептица 2.0 понравилась - порезче работает.
1
17 октября 2006 года
kot_
7.3K / / 20.01.2000
[QUOTE=Hydra]Собственно убрать Synchronize, который задерживает создание виуальных зкомпонент vcl до завершения функции frmDbConn->ConnectToDb.

[/QUOTE]
Если надо/хочется не ждать завершения - используйте асинхронный режим подключения. И/или собственные функции синхронизации. Тогда, возможно, ничто вас не задержит :)
В данном вашем случае стоит проверить для начала, что именно тормозит - а затем уж помещать это в отдельный поток. 5-7 секунд достаточно много - хотя при этом многое зависит от конфигурации сети. Попытайтесь обращаться к серверу по ИП а не по имени.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог