Асинхронное выполнение сценариев
-
Записи в таблице 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