Как вы думает устроен интернет? Как реализован TCP подключение?
Неужели добрый Волшебник своей волшебной палочкой касается одной сетевухи и другой - образуется линк? А злой волшебник рвет ножницами.. из-за этого у lordgray зависает приложение?
KEEPALIVE - нужны для определения „Ще не вмерл" ваш линк. Это и "есть пинги" до другого хоста.. Другой хост отвалился или машрут нарушился - так на уровне OS система узнает о живости сообщений. Как долго будет ждать, сколько пингов нужно послать чтобы определить об нарушений свзяи - делается этими параметрами.
lordgray писал(а):а ЧТО ДЕЛАТЬ, если определил, что Database.Open завис.
дисконнектить и фрешить. Ровно так же как устроен проигрыватель фильмов - Что делать если я фильм закрыл.. играть до конца?
lordgray писал(а):Она открывает локальную базу, и пользователь с ней работает. Помимо этого, стартует поток, в котором идет подключение к удаленной базе, для обновления локальной. И проблема возникает в том случае, если таймаут еще не настал, а пользователь закрывает программу.
Вот вы едете на авто, тут "вити надо выйти".. Начинаете сигналить правым фанарем, прижимаетесь к обочине сбрасываете скорость..
Дисконектить подключение в отдельном потоке.
lordgray писал(а):В этом случае программа не закрывается, т.к. есть работающий поток, а зависает. И что делать? Terminate потока бесполезен, Free хоть потока, хоть Database, приводит к Acces Violation.
Естественно, как "вити надо выйти" при скорости в 150км/ч? При Terminate вы катапультируете..
Зачем вам отдельный поток? для каких целей? С отдельным потоком нужно уметь работать. Тут вам не Java где object=NULL все дискрипторы за вас закроют, трейды затушат. Тут нужно самим тушить все открытые хендлы и освобождать выделенные рессурсы..
lordgray писал(а):Неужели нет способа, корректно остановить поток и удалить его?
Есть. Просто термитить трейд этого мало.