Форум » Clipper » Таймаут при ошибке открытия » Ответить

Таймаут при ошибке открытия

suv2: fOpen("filename.ext",foExclusive) Если файл уже открыт, то прежде чем fopen() вернет -1, проходит около 3-4 секунд, при этом система загружена на 100% и ничего сделать нельзя. Если программа постоянно проверяет, можно ли открыть файл монопольно, а он занят, то делать что-то другое на этом компьютере вообще невозможно - все ресурсы уходят на элементарную в сущности операцию. как заставить винду возвращать ошибку немедленно (параметр в реестре?)

Ответов - 15

Dima: Та же фигня , так и не решил эту проблему.

AndreyZh: А если? Когда-то делал: 1. Делаю копию файла (некоторые функции не дают скопировать и возвращают ошибку (можно анализировать)) 2. Пытаюсь записать вместо (при открытом файле возврат ошибки), а если получилось, то "вернуть" файл и открывать как хотите...

wad1: На серверах NT-шной линии раньше редактировали реестр: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters] "SharingViolationRetries"=dword:00000001 "SharingViolationDelay"=dword:00000030 Тут уменьшается количество попыток блокировок и сокращается время ожидания между ними. Но наверное могут быть и отрицательные последствия, хотя какие- не знаю. Не все администраторы нам такое изменение позволяли сделать. Потом ушли от попыток открыть файл монопольно путем введения таблицы MONITOR.DBF. В нее записывается при открытии каждая таблица с указанием пользователя и блокируется. После этого для определения - открыт ли файл - выполняется поиск записи о нем в мониторе и попытка блокировки записи. Это существенно быстрее. Побочный эффект - можно в любой момент узнать кто работает с базой. При нормальном выходе из программы записи, созданные выходящим пользователем, удаляются. Если кто-то отвалился аварийно, то его записи разблокируются и остаются. Это позволяет оповещать пользователей об аварийной ситуации


PSP: ...и еще можно попробывать: The simplest way to resolve problems related to oplocks is to disable them on behalf of the LAN Manager server. This is done by manipulating the following registry key: \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters EnableOplocks REG_DWORD 0 or 1 Default: 1 (true) Specifies whether the server allows clients to use oplocks on files. Oplocks are a significant performance enhancement, but have the potential to cause lost cached data on some networks, particularly wide-area networks. By default, the registry entry is 1 (oplock enabled), as a rule of thumb you should set this key to 0 (disable oplock) when sharing files with Xbase++/Clipper/FoxPro and MS-Access. We have not encountered any performance drawbacks in real-world scenarios after having disabled oplocks. However problems with Xbase++ file-based database applications simple went away after re-configuration of the server.

suv2: wad1 пишет: На серверах NT-шной линии раньше редактировали реестр: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters] "SharingViolationRetries"=dword:00000001 "SharingViolationDelay"=dword:00000030 спасибо. а на линейке 9x/Me ?

Dima: Должен быть какой то другой способ кроме правки реестра. Для примера антивирус AVZ в мастере поиска и устранения проблем -> Чистка системы + галка на папке TEMP и системной папке TEMP , вовсе не "вешается" а срабатывает довольно быстро в то время как в этих папках может находится кучка залоченных файлов. Нужно пробовать что то из разряда что предложил AndreyZh или же Юра писать какую то свою хитрую функцию на ASM (а ты в этом мастер если не ошибаюсь )

AlexMyr: Простенький примерчик (clipper 5.3b) ?fopen("aa.txt",16),time() ?fopen("aa.txt",16),time() inkey(0) Результат, проверял на 98 и ХР handle time 6 16:31:00 -1 16:31:00

AlexMyr: Dima пишет: А попробуй fopen("aa.txt",18) ?fopen("aa.txt",18),time() ?"ferror=",ferror(),time() ?fopen("aa.txt",18),time() ?"ferror=",ferror(),time() inkey(0) Результат xp 6 16:39:39 ferror= 0 16:39:39 -1 16:39:39 ferror= 5 16:39:39 98 6 16:40:47 ferror= 0 16:40:47 -1 16:40:47 ferror= 5 16:40:47

AlexMyr: А файл случайно не в сетке лежит?

Dima: AlexMyr пишет: А файл случайно не в сетке лежит? В сетке PS Хммм , странно , раньше была задержка а сейчас ее нет (файлы лежат на сервере Novell) Полтергейст

Andrey: Dima пишет: файлы лежат на сервере Novell) Для Новела можно воспользоваться функциями семафора, там в NG были они. В свое время пользовался ими.

Dima: Andrey пишет: Для Новела можно воспользоваться функциями семафора Библиотеку не напомнишь ? ;)

Andrey: Dima пишет: Библиотеку не напомнишь ? ;) Поставка Clipper 5.3 - стандартная... CT2 - функции под НОВЕЛ !

AndreyZh: Поставка Clipper 5.3 - стандартная... CT2 - функции под НОВЕЛ ! Нетучки... Пытался найти в своём "мусоре", но увы. Когда-то до 1993 года мы (мой отдел) использовали покупную библиотеку по Novell и там даже "честные" и работающие транзакции и семафоры были. Но как зовётся уже забыл.

wad1: suv2 пишет: спасибо. а на линейке 9x/Me ? Серьезные задержки возникали именно на NT (в качестве сервера). На 98 они не были так заметны. На Novell их также не было (Novell - лучший файл-сервер). Про 9X вопрос почему задан - вы такие машины в качестве серверов используете? Проблема именно на серверной стороне, локальные компьютеры на эту проблему не влияют.



полная версия страницы