Skip to content
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Collapse
Brand Logo

CELua[RU]

  1. Главная
  2. Статьи
  3. Приёмы
  4. Асинхронное выполнение сценариев

Асинхронное выполнение сценариев

Запланировано Прикреплена Закрыта Перенесена Приёмы
ce .ctce aace asyncфишки
1 Сообщения 1 Posters 28 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • MasterGHM Не в сети
    MasterGHM Не в сети
    MasterGH Администраторы
    написал в отредактировано MasterGH
    #1

    Записи в таблице CE представим как сценарии, которые должны выполнятся асинхронно. Т.е. они что-от делают некоторое время одновременно, например, сканируют память. При этом ничего зависает.

    Для этого будем актировать такую опцию
    5a911696-ae56-4772-bf1e-7b32fab46d53-изображение.png

    Если эту опцию поставить на записи, то появляются вот такие часики
    29546916-8f04-4fa5-99df-d43ae5016af3-изображение.png

    АА-шные скрипты могут искать в этот момент сигнатуру.

    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]
    

    03992ff1-2202-400d-9c53-71d3d71d4163-изображение.png

    После выполнения
    b8fdfa10-52dd-4ad2-8ede-445f363c967c-изображение.png

    Если продублировать 4 скрипта, то видим, что нельзя запустить асинхронно более двух скриптов
    c0aeea14-3aa7-457c-9685-f1fb4bc3859f-изображение.png

    Вот такой вариант еще

    [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

    1 ответ Последний ответ
    0

Powered by NodeBB | Contributors
СeLua[RU] 2024©
  • Войти

  • Нет учётной записи? Зарегистрироваться

  • Login or register to search.
  • Первое сообщение
    Последнее сообщение
0
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы