|
|
|
Алгоритм реализации (Один Расчет в один момент времени)
|
|||
|---|---|---|---|
|
#18+
Здравствуйте ! у меня такой вопрос Есть задача реализованная на visual fox 7.0 (но это не столь важно) в ней есть некий алгоритм расчета теперь стала задача что юзеров у данной программы становится много и они все территориально разнесены Мне нужно что бы расчет реализованный в программе мог в один момент времени быть запущенным только на одной машине !!! и другие юзеры не могли запустить данный расчет если он еще не окончен на первой машине какие есть варианты реализации данной задачи ?? у меня есть такой вариант что допустим определять блокирована некая запись в специальной таблице или нет и если она не блокирована то давать возможность запуска расчета и наоборот . И здесь в случае если по неким неведомым силам расчет на одной машине в один момент времени закончится заранее (т.е если например будет какая нибудь ошибка) то запись автоматически разблокируется и можно будет заново запустить расчет Как вы считаете является он оптимальным ? и какие возможны подводные камни ? Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 11:04:42 |
|
||
|
Алгоритм реализации (Один Расчет в один момент времени)
|
|||
|---|---|---|---|
|
#18+
не нужно запись блокировать!! попробуй создать флаг lnhandle=fcrea('...') if lnhandle<=0 =messagebox('А ктойто ужеть считает') retu endif try .... расчет ... catch =messagebox('Ошибочка при расчете') endtry =fclo(lnhandle) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 11:15:52 |
|
||
|
Алгоритм реализации (Один Расчет в один момент времени)
|
|||
|---|---|---|---|
|
#18+
т.е алгоритм с файлом такой сначала пытаемся удалить файл (допустим расчет был закончен путем срубания приложения тогда я понимаю, что try catch не срабатывает ) если удалили то никто не считает и создаем файл ...... try catch Удаляем файл endtry расчет закончен Удаляем файл (что бы быть уверенным ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 11:24:47 |
|
||
|
Алгоритм реализации (Один Расчет в один момент времени)
|
|||
|---|---|---|---|
|
#18+
удалять файл не нужно (креэйт сам перезапишет) если из приложения даже вывалится если фокс закроется блокировка с файла снимется сама fcre()-том нужно пытаться писать один и тот же файл со всех станций в одном и том же каталоге ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 11:41:19 |
|
||
|
Алгоритм реализации (Один Расчет в один момент времени)
|
|||
|---|---|---|---|
|
#18+
удалять файл не нужно его главное закрыть!!!, чтобы не мешать затем другим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 11:42:40 |
|
||
|
Алгоритм реализации (Один Расчет в один момент времени)
|
|||
|---|---|---|---|
|
#18+
Интересно, чем физическое создание файла так уж принципиально отличается от блокировки? А если подобных расчетов много? Много "мусорных" файликов? Как мне кажется, проще блокировать запись служебной таблицы. Одна запись - один вид (тип) расчета. Код: plaintext 1. 2. 3. 4. 5. По окночании расчета снимать блокировку с этой записи. Можно при старте расчета указать в этой служебной записи имя пользователя (SYS(0)) на машине которого выполняется расчет. Тогда можно будет выдать сообщение: Расчет выполняется на машине ... И, кстати, принципиальный вопрос: где физически будет создаваться это файл-флаг? Программа-то сетевая. Это значит, что подобный файл должен создаваться где-то на сервере. А оно надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 11:52:42 |
|
||
|
Алгоритм реализации (Один Расчет в один момент времени)
|
|||
|---|---|---|---|
|
#18+
понял Спасибо тоже вариант !! хорошо как определить путь (каталог) из которого запущена программа ? чтобы в том каталоге создать файл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 11:52:45 |
|
||
|
Алгоритм реализации (Один Расчет в один момент времени)
|
|||
|---|---|---|---|
|
#18+
ну воче я не оч.понял вообще приложения держат локально а данные в сети sys(5)+sys(2003) Curdir() fullpath(sys(5)+sys(2003)) justpath(sys(5)+sys(2003)) и т.д. и т.п. по хелпу только зачем??? в сети нужно флаг создавать, чтобы его все видели ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 11:59:56 |
|
||
|
Алгоритм реализации (Один Расчет в один момент времени)
|
|||
|---|---|---|---|
|
#18+
ВладимирМИнтересно, чем физическое создание файла так уж принципиально отличается от блокировки? А если подобных расчетов много? Много "мусорных" файликов? Как мне кажется, проще блокировать запись служебной таблицы. Одна запись - один вид (тип) расчета. Код: plaintext 1. 2. 3. 4. 5. По окночании расчета снимать блокировку с этой записи. Можно при старте расчета указать в этой служебной записи имя пользователя (SYS(0)) на машине которого выполняется расчет. Тогда можно будет выдать сообщение: Расчет выполняется на машине ... И, кстати, принципиальный вопрос: где физически будет создаваться это файл-флаг? Программа-то сетевая. Это значит, что подобный файл должен создаваться где-то на сервере. А оно надо? я вот об этом тоже думал чтобы информировать юзера кто считает что бы у них недоумений не было т.е данные полей я считать смогу если запись блокирована ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 12:03:43 |
|
||
|
Алгоритм реализации (Один Расчет в один момент времени)
|
|||
|---|---|---|---|
|
#18+
alex11100ну воче я не оч.понял вообще приложения держат локально а данные в сети sys(5)+sys(2003) Curdir() fullpath(sys(5)+sys(2003)) justpath(sys(5)+sys(2003)) и т.д. и т.п. по хелпу только зачем??? в сети нужно флаг создавать, чтобы его все видели не у нас программа также на сетевом диске и у всех юзеров запускается с одного пути сделано было так что бы ее обновлять быстро и не бегать по клиентам и я думал что в тот же каталог (Сетевой) как вариант сваливать темповый файл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 12:06:40 |
|
||
|
Алгоритм реализации (Один Расчет в один момент времени)
|
|||
|---|---|---|---|
|
#18+
ага и под дых ему и .... так, начинаю козлиться странно, а почему люди не воспринимать простых логичных вещей просто - не значит плохо !! чем проще - тем меньше вероятности, что суждение или решение ошибочное!! логика!!! она наука странная! ну хочешь видеть кто - напиши в файл кто и считай если криэйт не сработал и покажи юзеру или уж тогда если наворачивать, так по полной и блокировки в табл и почтовку и отключения и сервис ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 12:10:16 |
|
||
|
Алгоритм реализации (Один Расчет в один момент времени)
|
|||
|---|---|---|---|
|
#18+
а в каталогах баз создать так просто файлы и удалить у нас нельзя там ограничения различные на возможность осуществления файловых операций у всех юзеров по разному ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 12:10:19 |
|
||
|
Алгоритм реализации (Один Расчет в один момент времени)
|
|||
|---|---|---|---|
|
#18+
Ладно все ! логику я понял Всем Спасибо !! Тема закрыта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 12:12:05 |
|
||
|
Алгоритм реализации (Один Расчет в один момент времени)
|
|||
|---|---|---|---|
|
#18+
Hi alex11100! > не нужно запись блокировать!! > попробуй создать флаг И чем же так принципиально отличается блокировка записи от блокировки файла в твоём случае? Не вижу совершенно никаких плюсов. А минусы очевидны - лишние файлики в папках образуются... Если расчёт один - это ещё куда ни шло, если из 100 - это получается помойку делаем :( 2 =Sergey== Вообще обычно не блокируют "расчёт" как таковой - блокируют какие-то данные, которые этот расчёт использует (или только те что он изменяет). Почему так? Потому что: 1) Один и тот-же алгоритм может применятся к несвязанным данным - например юзер 1 "считает" для клиента "АБВ", а юзер 2 - для клиента "ЭЮЯ" - и никто никому не мешает. 2) РАЗНЫЕ алгоритмы могут использовать одни и те-же данные - например если алгоритм 1 занимается "распределением" некоторой суммы по куче записей, а алгоритм 2 напротив - формирует эти самые суммы для распределения (из других источников конечно) - то их совместная работа БЕЗ блокировки соответствующих записей закончится очень печально - получится что сначала "распределялось" 100р. А ближе к концу процесса стало распределяться уже 200р. - и общая сумма всего "распределённого" окажется где-то в этом интервале :( Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2005, 01:10:55 |
|
||
|
Алгоритм реализации (Один Расчет в один момент времени)
|
|||
|---|---|---|---|
|
#18+
Igor Korolyov Hi alex11100! > не нужно запись блокировать!! > попробуй создать флаг И чем же так принципиально отличается блокировка записи от блокировки файла в твоём случае? Не вижу совершенно никаких плюсов. А минусы очевидны - лишние файлики в папках образуются... Если расчёт один - это ещё куда ни шло, если из 100 - это получается помойку делаем :( 2 =Sergey== Вообще обычно не блокируют "расчёт" как таковой - блокируют какие-то данные, которые этот расчёт использует (или только те что он изменяет). Почему так? Потому что: 1) Один и тот-же алгоритм может применятся к несвязанным данным - например юзер 1 "считает" для клиента "АБВ", а юзер 2 - для клиента "ЭЮЯ" - и никто никому не мешает. 2) РАЗНЫЕ алгоритмы могут использовать одни и те-же данные - например если алгоритм 1 занимается "распределением" некоторой суммы по куче записей, а алгоритм 2 напротив - формирует эти самые суммы для распределения (из других источников конечно) - то их совместная работа БЕЗ блокировки соответствующих записей закончится очень печально - получится что сначала "распределялось" 100р. А ближе к концу процесса стало распределяться уже 200р. - и общая сумма всего "распределённого" окажется где-то в этом интервале :( Posted via ActualForum NNTP Server 1.3 в нашей ситуации на мой взгляд предпочтительней выглядит блокировка и настройка программы на некую "мифическую запись" чем данных (испольуземых для расчета) руководствуюсь этой логикой уж очень много добавлять кода да и времени как обычно мало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2005, 06:33:05 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33319406&tid=1593285]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
84ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 225ms |
| total: | 423ms |

| 0 / 0 |
