RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : Установка атрибутов файлов из Rexx


Список сообщений | Написать новое | Ответить на сообщение | Домой Поиск:
Предыдущее сообщение | Следующее сообщение
From : Aleksey Tarasow, 2:5053/57, librexx.ru azimut21.ru azimut64.ru
To : Improver
Subj : Установка атрибутов файлов из Rexx

> > > > Такой вопрос, а есть иной способ установить флаги файлов из 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, а при завершении процесса удалять их оттуда... Или наоборот, сразу сбросить в очередь полный список всех файлов и каждый процесс будет удалять оттуда строки по мере их обработки. В любом случае, отсутствие дополнительных дисковых операций должно, по идее, дать прирост в скорости обработки.

Процессы которые работают с файлами запускаются хаотично в любом количестве и не чего не знают друг о друге. Количество файлов за раннее не известно, но с течением времени будет только расти. Лочится только текущий файл, то есть с остальными файлами другие процессы могут делать что угодно. Выходит что каждый файл нужно искать отдельно в актуальном списке лоченных файлов.
Можно ли в очередь кидать сообщения (разными процессами), многократно их читать (каждым процессом, перед началом работы с каждым файлом), и удалять выборочно (например по индексу и т.п.)?


Sun 11 Jan 2015 19:47 Mozilla/5.0 (Windows NT 6.3; WOW64; rv:34.0) Gecko/20100101




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.