CELua[RU]
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы
    • Зарегистрироваться
    • Войти

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

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

      Записи в таблице 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

      • 1 / 1
      • Первое сообщение
        Последнее сообщение
      Powered by NodeBB | Contributors
      СeLua[RU] 2025©