|
запуск фоновой процедуры
|
|||
---|---|---|---|
#18+
Добрый вечер! Появилась необходимость работы с фоновыми процессами. Как определить программно запущена ли пользовательская процедура в фоновом режиме? Из системной области (%SYS) можно определить в таблице SYS.Process. А вот как достучаться к этой системной таблице из пользовательского раздела - непонятно? При компиляции программы появляется ошибка "SQLCODE=-30 : Таблица 'SYS.PROCESS' не найдена" Или понять в какую глобаль записываются данные таблицы %SYS.ProcessQuery? Если пробовать использовать %SYS.ProcessQuery - ошибка такого вида --------------------------- Studio --------------------------- ОШИБКА #5475: Ошибка при компиляции программы: ProgEE. Ошибок: ERROR: source lines(9) : MPP5610 : Не определен макрос: 'FOREJOB' TEXT: s %mmmsqld(3)=$s(j=$$$FOREJOB:$$$FOREJOBNAME,j=$$$NETSRVTYPE:$$$NETSRVTYPENAME,j=$$$NETDMNTYPE:$$$NETDMNTYPENAME,j=$$$JOBSRVTYPE:$$$JOBSRVTYPENAME,1:"Unknown"_j) ERROR: source lines(9) : MPP5610 : Не определен макрос: 'FOREJOBNAME' TEXT: s %mmmsqld(3)=$s(j=$$$FOREJOB:$$$FOREJOBNAME,j=$$$NETSRVTYPE:$$$NETSRVTYPENAME,j=$$$NETDMNTYPE:$$$NETDMNTYPENAME,j=$$$JOBSRVTYPE:$$$JOBSRVTYPENAME,1:"Unknown"_j) ERROR: source lines(9) : MPP5610 : Не определен макрос: 'NETSRVTYPE' TEXT: s %mmmsqld(3)=$s(j=$$$FOREJOB:$$$FOREJOBNAME,j=$$$NETSRVTYPE:$$$NETSRVTYPENAME,j=$$$NETDMNTYPE:$$$NETDMNTYPENAME,j=$$$JOBSRVTYPE:$$$JOBSRVTYPENAME,1:"Unknown"_j) ERROR: source lines(9) : MPP5610 : Не определен макрос: 'NETSRVTYPENAME' TEXT: s %mmmsqld(3)=$s(j=$$$FOREJOB:$$$FOREJOBNAME,j=$$$NETSRVTYPE:$$$NETSRVTYPENAME,j=$$$NETDMNTYPE:$$$NETDMNTYPENAME,j=$$$JOBSRVTYPE:$$$JOBSRVTYPENAME,1:"Unknown"_j) ERROR: source lines(9) : MPP5610 : Не определен мак --------------------------- ОК --------------------------- ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 19:16 |
|
запуск фоновой процедуры
|
|||
---|---|---|---|
#18+
alexleschКак определить программно запущена ли пользовательская процедура в фоновом режиме? Using the $ZCHILD and $ZPARENT Special Variables alexleschИз системной области (%SYS) можно определить в таблице SYS.Process. А вот как достучаться к этой системной таблице из пользовательского раздела - непонятно? При компиляции программы появляется ошибка "SQLCODE=-30 : Таблица 'SYS.PROCESS' не найдена"Вы не указали версию СУБД, поэтому пока посмотрите 9163476 . PS: кроме фоновых процессов есть возможность использовать фоновые задачи, за ходом выполнения которых в Портале удобно наблюдать в разделе "System Operation" > "Background Tasks". ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 20:52 |
|
запуск фоновой процедуры
|
|||
---|---|---|---|
#18+
d ^%SS ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 20:52 |
|
запуск фоновой процедуры
|
|||
---|---|---|---|
#18+
alexleschЕсли пробовать использовать %SYS.ProcessQuery - ошибка такого видаЗашёл в область "USER" и выполнил без проблем запрос: SELECT * FROM %SYS.ProcessQuery Приведите пример Вашего использования %SYS.ProcessQuery . ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 20:59 |
|
запуск фоновой процедуры
|
|||
---|---|---|---|
#18+
Всем спасибо. Проблему решил следующим образом. Из пользовательского раздела запускается функция, которая возвращает результат проверки. Если программы нет - запускаю j ^MyRoutine::20 checkProgr() ; проверка запущена ли программа set rez= 0 zn "%SYS" s PID="" for { set PID=##CLASS(SYS.Process).NextProcess(PID) if PID'="" { set Job=##CLASS(SYS.Process).%OpenId(PID) if (Job '= "") { set routine = Job.Routine if (routine = "MyRoutine") { s rez= 1 quit} } } else { zn "user" q } } zn "user" q rez ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2012, 12:31 |
|
|
start [/forum/topic.php?fid=39&msg=38066878&tid=1557288]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
132ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 267ms |
total: | 497ms |
0 / 0 |