- Code: Select all
<%
USER ~tred_id
USER ~TEK-TASK-NAME2
WINAPI: OpenThread KERNEL32.DLL
:NONAME
>R
R@ CELL+ @ ~tred_id !
R@ 2 CELLS + @ ASCIIZ> S>ZALLOC ~TEK-TASK-NAME2 !
R@ @
PAUSE
~tred_id @ ?DUP
IF
0 1 OpenThread ?DUP
IF
STOP
S" Task %QUOTE%%~TEK-TASK-NAME2 @ ASCIIZ>%%QUOTE%, thread %~tred_id @%, was kill, when timer OFF" EVAL-SUBST CRON-LOG
THEN
THEN
R> FREE THROW
; TASK: ~batcontrol
: KILLWORKTIME ( миллисекунды -- id следящего потока ) { seconds-timer -- }
3 CELLS ALLOCATE THROW >R
seconds-timer R@ !
GetCurrentThreadId R@ CELL+ !
CUR-TASK-NAME S>ZALLOC R@ 2 CELLS + !
R> ~batcontrol START
;
%>
#( задание_времени_жизни_задачи
NoActive
Action:
10000 KILLWORKTIME
MSG: "ждемс"
STOP \ остановка следящего потока (не обязательно, сам остановиться, но на стеке лежит число)
)#
KILLWORKTIME нужно на входе время в
миллисекундах, сколько отпущено работающей задаче,
на выходе оно оставляет id следящего потока, если id не нужен, его можно сразу DROPнуть (т.е. 10000 KILLWORKTIME DROP)
или нет и потом использовать при необходимости ))
при остановки задачи пишется в стандартный лог (CRON-LOG) сообщение
P.S. не самое простое решение, можно намного проще реализовать