Записи в таблице CE представим как сценарии, которые должны выполнятся асинхронно. Т.е. они что-от делают некоторое время одновременно, например, сканируют память. При этом ничего зависает.
Для этого будем актировать такую опцию
Если эту опцию поставить на записи, то появляются вот такие часики
АА-шные скрипты могут искать в этот момент сигнатуру.
Lua скрипты потестить было интересно, узнать действительно ли асинхронно выполняется. Например, один скрипт выполняет счет, второй выполняет счет. По выполнении выводится результат.
[ENABLE]
{$lua}
local _, counter, _, async = memrec.Description:match('(Cunt.=.)(%d*).*(Async.=.)(%w*)')
memrec.Async = async == 'true'
for i = 1, counter do end
local currentTime = os.date("%c"):gsub('/','.')
print('Finish record:' .. memrec.Description..', at time ' .. currentTime)
memrec.Active = false
function onMemRecPostExecute(memoryrecord, newState, succeeded)
if (memoryrecord == memrec and newState == true) then
memrec.Active = false
end
end
{$asm}
[DISABLE]
После выполнения
Если продублировать 4 скрипта, то видим, что нельзя запустить асинхронно более двух скриптов
Вот такой вариант еще
[ENABLE]
{$Lua}
function threadFunction(th)
th.freeOnTerminate(false)
th.Name = 'myThread'
for b = 1, 200000000 do
--checkSynchronize()
end
--while not th.Terminated do
-- myvar=myvar+1
-- synchronize(function() MainForm.Caption = 'myvar '..myvar end)
-- sleep(2000)
--end
synchronize(function() print("1") end)
end
--myvar=0
local myThread = createNativeThreadSuspended(threadFunction)
myThread.resume()
{$Asm}
[DISABLE]
{$Lua}
if myThread then
myThread.terminate()
myThread.waitfor()
myThread.destroy()
myThread=nil
end
{$Asm}
таблица
Asynchronous testing.CT