RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : Ответить на сообщение
Имя:
e-mail:
FIDO:
Home page:
сохранить данные о вас
Тема:
> > > > > Такой вопрос, а есть иной способ установить флаги файлов из Rexx, кроме SysFileTree и attrib? > > > > DLLю внешнюю написать с нужной функцией? > > > > Hу или на хоббесе пошаpиться - может кто уже написал. > > > Изменю вопрос. Опишу ситуацию: есть файлы, в которые могут писать одновременно несколько процессов. Во избежании, было принято решение попытаться их развести. Для чего каждый процесс начал "лочить" файл с которым работает. Для это устанавливается один из атрибутов файлов. Другие процессы проверяют установку этого атрибута, и если он установлен, ждут пока он снимется. Выглядит это так: > > > call SysFileTree FileActual, 'FileActual','FN','*****' > > > if FileActual.0>0 then do > > > do until FileActual.0>0 > > > call SysFileTree FileActual, 'FileActual','FN','**-*-' > > > if FileActual.0>0 then 'attrib +h "'FileActual'" > nul' > > > else call SysSleep Random(1,5)/10 > > > end /* until FileSearch.0>0 */ > > > end /* if FileActual.0>0 */ > > > и в конце работы "'attrib -h -s "'FileActual'" > nul'" > > > > > > При работе без "attrib", обработка 15 файлов занимает чуть больше 1 сек. В текущем виде почти 7 сек. Рост значительный, а обрабатывать привидеться более 400 файлов... > > > > > > Вопрос: может кто нибудь предложить иной алгоритм развода файлов в разные стороны? > > > > Предлагаю сбрасывать полные имена залоченых файлов в очередь, например в RXQUEUE, а при завершении процесса удалять их оттуда... Или наоборот, сразу сбросить в очередь полный список всех файлов и каждый процесс будет удалять оттуда строки по мере их обработки. В любом случае, отсутствие дополнительных дисковых операций должно, по идее, дать прирост в скорости обработки. > > Процессы которые работают с файлами запускаются хаотично в любом количестве и не чего не знают друг о друге. Количество файлов за раннее не известно, но с течением времени будет только расти. Лочится только текущий файл, то есть с остальными файлами другие процессы могут делать что угодно. Выходит что каждый файл нужно искать отдельно в актуальном списке лоченных файлов. > Можно ли в очередь кидать сообщения (разными процессами), многократно их читать (каждым процессом, перед началом работы с каждым файлом), и удалять выборочно (например по индексу и т.п.)? >
_, _, _,
/ \ (_ / ~ )
\ / , ) / /
~ ~ ~~~
Programmed by
Dmitri Maximovich
,
Dmitry I. Platonoff
,
Eugen Kuleshov
.
25.09.99 (c) 1999,
RU/2
. All rights reserved.
Rewritten by
Dmitry Ban
. All rights ignored.