Доброе утро.
Знаю что подобных тем в форуме было немало. Но хотел бы уточнить.
Насколько я понял — сплаш-скрин (форма), небходимо оставлять в основном потоке приложения, а "длительные действия" — получение/ввод данных в базу, огромные циклы и тд. необходимо — выносить в отдельный поток, с синхронизацией с основным, для обновлени спляш формы.
Теперь собственно вопросы.
1. Является ли такой метод "нормальным", "красивым" и иже с ними..
2. Что делать если например я не выполняю циклические дейсвия в потоке — т.е.
procedure myThead.Execute;
begin
while true do
begin
{ Some actions }
Synchronize(SomeMethod);
end;
end;
а выполняю одно действие — например коннект к базе, как тогда осуществлять синхронизацию? Ведь прога подвиснит на момент коннекта...
Заранее спасибо
"CarandAche" <44880@users.rsdn.ru> wrote in message
news:1330446@news.rsdn.ru...
> а выполняю одно действие — например коннект к базе, как тогда осуществлять синхронизацию? Ведь прога подвиснит на момент коннекта...
Тут есть еще один подводный камень, если ты будешь коннектится к БД из потока, а потом заберешь оттуда хендл подключения и будешь работать из основного потока, в некоторых БД это может ее разрушить. Обычно просто выводят сплеш типа "Connecting to the DB..." и коннектятся. Прога конечно подвисает на несколько секунд, но это не страшно. Обычно компоненты которые подключаются к БД имеют свойство Timeout, после которого если подключение не установилось, произойдет исключениею.
Posted via RSDN NNTP Server 1.9
Здравствуйте, CarandAche, Вы писали:
CA>Доброе утро.
CA>Знаю что подобных тем в форуме было немало. Но хотел бы уточнить.
CA>Насколько я понял — сплаш-скрин (форма), небходимо оставлять в основном потоке приложения, а "длительные действия" — получение/ввод данных в базу, огромные циклы и тд. необходимо — выносить в отдельный поток, с синхронизацией с основным, для обновлени спляш формы.
CA>Теперь собственно вопросы.
CA>1. Является ли такой метод "нормальным", "красивым" и иже с ними..
CA>2. Что делать если например я не выполняю циклические дейсвия в потоке — т.е.
CA> procedure myThead.Execute;
CA> begin
CA> while true do
CA> begin
CA> { Some actions }
CA> Synchronize(SomeMethod);
CA> end;
CA> end;
CA>а выполняю одно действие — например коннект к базе, как тогда осуществлять синхронизацию? Ведь прога подвиснит на момент коннекта...
CA>Заранее спасибо
На Synchronize подвиснет и поток
Решение я предлагал в
этом постеАвтор: Danchik
Дата: 27.04.05
Здравствуйте, wellwell, Вы писали:
W>Тут есть еще один подводный камень, если ты будешь коннектится к БД из потока, а потом заберешь оттуда хендл подключения и будешь работать из основного потока, в некоторых БД это может ее разрушить. Обычно просто выводят сплеш типа "Connecting to the DB..." и коннектятся. Прога конечно подвисает на несколько секунд, но это не страшно. Обычно компоненты которые подключаются к БД имеют свойство Timeout, после которого если подключение не установилось, произойдет исключениею.
это относится к ADO. еще была бага с Информиксом. все остальные варианты доступа ко всем остальным серверам на сколько мне известно проблем не имеют. так что это скорее проблема COMа, а не проэктирования, хотя если есть ограничение использовать именно этот механизм доступа — тогда да...
... << RSDN@Home 1.1.4 beta 6a rev. 436>>