powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Алгоритм реализации (Один Расчет в один момент времени)
15 сообщений из 15, страница 1 из 1
Алгоритм реализации (Один Расчет в один момент времени)
    #33319220
=Sergey==
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте !
у меня такой вопрос
Есть задача реализованная на visual fox 7.0 (но это не столь важно)
в ней есть некий алгоритм расчета
теперь стала задача что юзеров у данной программы становится много и они все территориально разнесены

Мне нужно что бы расчет реализованный в программе
мог в один момент времени быть запущенным только на одной машине !!!
и другие юзеры не могли запустить данный расчет если он еще не окончен на первой машине

какие есть варианты реализации данной задачи ??

у меня есть такой вариант что допустим определять блокирована некая запись в специальной таблице или нет и если она не блокирована то давать возможность запуска расчета и наоборот . И здесь в случае если по неким неведомым силам расчет на одной машине в один момент времени закончится заранее (т.е если например будет какая нибудь ошибка) то запись автоматически разблокируется и можно будет заново запустить расчет

Как вы считаете является он оптимальным ?
и какие возможны подводные камни ?
Спасибо
...
Рейтинг: 0 / 0
Алгоритм реализации (Один Расчет в один момент времени)
    #33319258
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не нужно запись блокировать!!

попробуй создать флаг

lnhandle=fcrea('...')
if lnhandle<=0
=messagebox('А ктойто ужеть считает')
retu
endif
try
.... расчет ...
catch
=messagebox('Ошибочка при расчете')
endtry
=fclo(lnhandle)
...
Рейтинг: 0 / 0
Алгоритм реализации (Один Расчет в один момент времени)
    #33319292
=Sergey==
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
т.е алгоритм с файлом такой

сначала пытаемся удалить файл (допустим расчет был закончен путем срубания приложения тогда я понимаю, что try catch не срабатывает )
если удалили то никто не считает и
создаем файл

......
try
catch
Удаляем файл
endtry

расчет закончен

Удаляем файл (что бы быть уверенным )
...
Рейтинг: 0 / 0
Алгоритм реализации (Один Расчет в один момент времени)
    #33319346
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
удалять файл не нужно (креэйт сам перезапишет)

если из приложения даже вывалится
если фокс закроется
блокировка с файла снимется сама

fcre()-том нужно пытаться писать один и тот же файл со всех станций
в одном и том же каталоге
...
Рейтинг: 0 / 0
Алгоритм реализации (Один Расчет в один момент времени)
    #33319353
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
удалять файл не нужно
его главное закрыть!!!, чтобы не мешать затем другим
...
Рейтинг: 0 / 0
Алгоритм реализации (Один Расчет в один момент времени)
    #33319405
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, чем физическое создание файла так уж принципиально отличается от блокировки? А если подобных расчетов много? Много "мусорных" файликов?

Как мне кажется, проще блокировать запись служебной таблицы. Одна запись - один вид (тип) расчета.

Код: plaintext
1.
2.
3.
4.
5.
select MyTab
LOCATE FOR (запись с идентификатором нужного расчета)
IF RLOCK()=.F.
* Кто-то уже выполняет расчет
ENDIF

По окночании расчета снимать блокировку с этой записи.

Можно при старте расчета указать в этой служебной записи имя пользователя (SYS(0)) на машине которого выполняется расчет. Тогда можно будет выдать сообщение: Расчет выполняется на машине ...

И, кстати, принципиальный вопрос: где физически будет создаваться это файл-флаг? Программа-то сетевая. Это значит, что подобный файл должен создаваться где-то на сервере. А оно надо?
...
Рейтинг: 0 / 0
Алгоритм реализации (Один Расчет в один момент времени)
    #33319406
=Sergey==
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
понял
Спасибо тоже вариант !!


хорошо как определить путь (каталог) из которого запущена программа ?
чтобы в том каталоге создать файл
...
Рейтинг: 0 / 0
Алгоритм реализации (Один Расчет в один момент времени)
    #33319452
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну воче я не оч.понял

вообще приложения держат локально а данные в сети

sys(5)+sys(2003)
Curdir()
fullpath(sys(5)+sys(2003))
justpath(sys(5)+sys(2003))
и т.д. и т.п. по хелпу


только зачем???

в сети нужно флаг создавать, чтобы его все видели
...
Рейтинг: 0 / 0
Алгоритм реализации (Один Расчет в один момент времени)
    #33319464
=Sergey==
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМИнтересно, чем физическое создание файла так уж принципиально отличается от блокировки? А если подобных расчетов много? Много "мусорных" файликов?

Как мне кажется, проще блокировать запись служебной таблицы. Одна запись - один вид (тип) расчета.

Код: plaintext
1.
2.
3.
4.
5.
select MyTab
LOCATE FOR (запись с идентификатором нужного расчета)
IF RLOCK()=.F.
* Кто-то уже выполняет расчет
ENDIF

По окночании расчета снимать блокировку с этой записи.

Можно при старте расчета указать в этой служебной записи имя пользователя (SYS(0)) на машине которого выполняется расчет. Тогда можно будет выдать сообщение: Расчет выполняется на машине ...

И, кстати, принципиальный вопрос: где физически будет создаваться это файл-флаг? Программа-то сетевая. Это значит, что подобный файл должен создаваться где-то на сервере. А оно надо?

я вот об этом тоже думал чтобы информировать юзера кто считает что бы у них недоумений не было

т.е данные полей я считать смогу если запись блокирована ?
...
Рейтинг: 0 / 0
Алгоритм реализации (Один Расчет в один момент времени)
    #33319478
=Sergey==
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex11100ну воче я не оч.понял

вообще приложения держат локально а данные в сети

sys(5)+sys(2003)
Curdir()
fullpath(sys(5)+sys(2003))
justpath(sys(5)+sys(2003))
и т.д. и т.п. по хелпу


только зачем???

в сети нужно флаг создавать, чтобы его все видели

не у нас программа также на сетевом диске и у всех юзеров запускается с одного пути
сделано было так что бы ее обновлять быстро и не бегать по клиентам
и я думал что в тот же каталог (Сетевой) как вариант сваливать темповый файл
...
Рейтинг: 0 / 0
Алгоритм реализации (Один Расчет в один момент времени)
    #33319503
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ага и под дых ему и ....

так, начинаю козлиться

странно, а почему люди не воспринимать простых
логичных вещей
просто - не значит плохо !!
чем проще - тем меньше вероятности, что суждение или решение ошибочное!!
логика!!! она наука странная!

ну хочешь видеть кто - напиши в файл кто
и считай если криэйт не сработал и покажи юзеру

или уж тогда если наворачивать, так по полной
и блокировки в табл и почтовку и отключения и сервис
...
Рейтинг: 0 / 0
Алгоритм реализации (Один Расчет в один момент времени)
    #33319504
=Sergey==
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а в каталогах баз создать так просто файлы и удалить у нас нельзя там ограничения различные на возможность осуществления файловых операций у всех юзеров по разному
...
Рейтинг: 0 / 0
Алгоритм реализации (Один Расчет в один момент времени)
    #33319515
=Sergey==
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ладно все !
логику я понял
Всем Спасибо !!
Тема закрыта
...
Рейтинг: 0 / 0
Алгоритм реализации (Один Расчет в один момент времени)
    #33321361
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi alex11100!

> не нужно запись блокировать!!
> попробуй создать флаг

И чем же так принципиально отличается блокировка записи от блокировки файла
в твоём случае? Не вижу совершенно никаких плюсов. А минусы очевидны -
лишние файлики в папках образуются... Если расчёт один - это ещё куда ни
шло, если из 100 - это получается помойку делаем :(

2 =Sergey==

Вообще обычно не блокируют "расчёт" как таковой - блокируют какие-то данные,
которые этот расчёт использует (или только те что он изменяет). Почему так?
Потому что:
1) Один и тот-же алгоритм может применятся к несвязанным данным - например
юзер 1 "считает" для клиента "АБВ", а юзер 2 - для клиента "ЭЮЯ" - и никто
никому не мешает.
2) РАЗНЫЕ алгоритмы могут использовать одни и те-же данные - например если
алгоритм 1 занимается "распределением" некоторой суммы по куче записей, а
алгоритм 2 напротив - формирует эти самые суммы для распределения (из других
источников конечно) - то их совместная работа БЕЗ блокировки соответствующих
записей закончится очень печально - получится что сначала "распределялось"
100р. А ближе к концу процесса стало распределяться уже 200р. - и общая
сумма всего "распределённого" окажется где-то в этом интервале :(

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Алгоритм реализации (Один Расчет в один момент времени)
    #33321435
=Sergey==
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor Korolyov
Hi alex11100!

> не нужно запись блокировать!!
> попробуй создать флаг

И чем же так принципиально отличается блокировка записи от блокировки файла
в твоём случае? Не вижу совершенно никаких плюсов. А минусы очевидны -
лишние файлики в папках образуются... Если расчёт один - это ещё куда ни
шло, если из 100 - это получается помойку делаем :(

2 =Sergey==

Вообще обычно не блокируют "расчёт" как таковой - блокируют какие-то данные,
которые этот расчёт использует (или только те что он изменяет). Почему так?
Потому что:
1) Один и тот-же алгоритм может применятся к несвязанным данным - например
юзер 1 "считает" для клиента "АБВ", а юзер 2 - для клиента "ЭЮЯ" - и никто
никому не мешает.
2) РАЗНЫЕ алгоритмы могут использовать одни и те-же данные - например если
алгоритм 1 занимается "распределением" некоторой суммы по куче записей, а
алгоритм 2 напротив - формирует эти самые суммы для распределения (из других
источников конечно) - то их совместная работа БЕЗ блокировки соответствующих
записей закончится очень печально - получится что сначала "распределялось"
100р. А ближе к концу процесса стало распределяться уже 200р. - и общая
сумма всего "распределённого" окажется где-то в этом интервале :(

Posted via ActualForum NNTP Server 1.3

в нашей ситуации на мой взгляд предпочтительней выглядит блокировка и настройка программы на некую "мифическую запись" чем данных (испольуземых для расчета) руководствуюсь этой логикой уж очень много добавлять кода да и времени как обычно мало.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Алгоритм реализации (Один Расчет в один момент времени)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]