![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Зависание клиентов [D7, FireBird 1.5]
Павел © (2005-10-19 19:09:00)есть БД и куча клиентов.
клиенты периодически виснут (в момент когда от БД пришел event), я так понимаю там какие то проблемы с транзакциями, вообщем расскажите как пишутся нормальные клиенты, основные принцыпы :)
Anatoly Podgoretsky (2005-10-25 09:06:00) [1]Павел © (19.10.05 19:37) [2]
Не надо
Zacho (2005-10-25 06:20:00) [2]Soliton © (24.10.05 21:50) [5]
IB-клиент (gds32.dll или fbclient.dll) неthread safe. Поэтому нужно или использовать объекты синхронизации в многопоточном приложении, или на каждый поток - своё подключение. Не знаю, почему у тебя виснет в случае отдельных подключений для каждого потока. У меня не виснет, и не у кого не виснет, что-то ты неправильно делаешь :)
Кстати, работать из нескольких потоков с одним подключением бессмысленно ещё и потому, что в контексте одного подключения все запросы всё равно будут выполняться последовательно, а не "паралельно", независимо от того, сколько потоков и транзакций. Для "паралельного" выполнения запросов нужно несколько коннектов.
Впрочем, всё это к ивентам не имеет никакого отношения :)
Soliton (2005-10-24 21:50:00) [3]Обращаю ваше внимание на необъяснимый эфект... клиент очень надежно зависает при попытке одновременного доступа через одно соединение нескольких желающих... виснет железно... Однозначно в многопоточном варианте (проверено)... причем по необъяснимым причинам от многопоточного зависания не спасает даже попытка создания дочерних соединений для каждого потока. Так что может все дело вовсе не в эвентах...
Zacho (2005-10-20 00:21:00) [4]Павел © (19.10.05 19:37) [2]
не, надо же как то клиентов оповещать об изменениях
В подавляющем большинстве случаев - не надо, и даже вредно.
А проблема у тебя скорее всего в компоненте, обрабатывающем ивенты. Попробуй какой-нибудь другой. Помниться, лет 5 назад самым безглючным считался SuperIBEventAlerter, сейчас - не знаю.
Ещё как вариант - клиентская библиотека от другой версии FB. Проверь.
Ну и конечно, могут быть баги у тебя в коде, но не видя твоего кода ничего сказать нельзя.
Павел (2005-10-19 22:11:00) [5]посоветуйте чтонибудь полезное...
Павел (2005-10-19 19:37:00) [6]не, надо же как то клиентов оповещать об изменениях...лучше расскажите как грамотно их обрабатывать...
Desdechado (2005-10-19 19:32:00) [7]основной принцип - события не использовать :)