Не сработает, выше объяснял почему. Открой Help на слове CritialSection, там совсем просто,самый первый пример прямо о нашей задаче...kreator писал(а):Если меняет одна процедура, то она может выставить некий флаг на время изменения. Я как понял задачу? Некая одна процедура заполняет глобальную очередь периодически, скорее всего полностью обновляет. Другие процедуры пользуются этими данными, возможно всеми. Т.е. моя мысль - заменить эту глобальную очередь базой данных (тем же tps) ничего не даст. Нарвёмся на те же грабли, только быстрее, потому что работа с tps будет медленнее.Дед Пахом писал(а):В том-то и фишка, что пока ты тупо копируешь, кто-то другой тупо её меняет.
Создать копию очереди
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Создать копию очереди
Создать копию очереди
Для NewUser.
Вот как можно манипулировать любой очередью. Может что-то пригодится в Вашей задаче....
Вот как можно манипулировать любой очередью. Может что-то пригодится в Вашей задаче....
Код: Выделить всё
PROGRAM
OMIT('***')
* Created with Clarion 10.0
* Date: 31.03.2016
* Time: 19:58
***
MAP
ManageAnyQ PROCEDURE(QUEUE qName) ! queue always passed by address
END
SomeQueue QUEUE ! очередь раз :)
ID LONG
Name STRING(50)
END
FQ QUEUE(FILE:Queue),PRE(mine) ! очередь 2 :)
END
CODE
SomeQueue.ID=1
SomeQueue.Name='Lucy'
ADD(SomeQueue)
SomeQueue.ID=2
SomeQueue.Name='James'
ADD(SomeQueue)
ManageAnyQ(SomeQueue) ! компромат на очередь 1
DIRECTORY(FQ,'C:\*.*',ff_:DIRECTORY+ff_:NORMAL)
ManageAnyQ(FQ) ! компромат на очередь 2
ManageAnyQ PROCEDURE(QUEUE qName)
LocalQueue &qName
field QUEUE
number LONG
name STRING(50)
END
QI STRING(512) ! информация о полях очереди - чтобы показать
CODE
! если нужно, создать такую же локальную очередь
LocalQueue &= NEW(qName)
! если нужно, скопировать данные в эту очередь
rec#=RECORDS(qName)
LOOP i#=1 TO rec# BY 1
GET(qName,i#)
LocalQueue :=: qName
ADD(LocalQueue)
END
ADD(LocalQueue) ! теперь записей в локальной очереди больше, чем во входной
! читаем поля
fieldNumber#=0
LOOP
IF HOWMANY(qName,fieldNumber#+1)=0 THEN BREAK.
fieldNumber#+=1
field.number=fieldNumber#
field.name=WHO(qName,fieldNumber#)
ADD(field)
QI = CLIP(LEFT(QI))&'('&field.number&') '&field.name&'|'
END
MESSAGE(RECORDS(qName)&' / '&RECORDS(LocalQueue) & '|' & CLIP(LEFT(QI)))
DISPOSE(LocalQueue)
-
- Старожил
- Сообщения: 238
- Зарегистрирован: 10 Ноябрь 2005, 23:07
- Откуда: Краснодар
- Благодарил (а): 6 раз
Создать копию очереди
Спасибо всем откликнувшимся! Навыдавали вы, однако, три короба к размышлению. Я, конечно, подозревал, что могут быть проблемы при решении данной задачи, но всплывшие нюансы, разноликость виденья ситуации и способов ее решения вынуждают меня взять тайм-аут, в первую очередь, для осмысления изложенного. Но, это не значит, что не буду рад продолжению развития данной темы.