При использовании приведённых ниже демонстрационных скриптов наблюдается повышенная нагрузка на CPU и медленный вывод содержимого в таблицы QLua. При этом вывод в заголовки окон этих таблиц производится нормально. Просьба проверить оптимальность реализации отрисовки содержимого таблиц. Используется светлая тема терминала 9.3.3.3, на тёмной не проверялось, наверное, ещё хуже будет.
В течение 7 дней можно скачать нужные демо-файлы по ссылке: Описание приводится ниже.
Файлы RunDemo1.lua, ...m RunDemo9.lua каждый имеет свои настройки и запускают общий файл Demo.lua. Каждый скрипт выводит окно и периодически с некоторым таймаутом, заданным в Demo.lua, обновляет свою таблицу на экране. Скрипты надо запускать одновременно.
Просьба к разработчикам ответить на вопрос: считается ли такая скорость отрисовки нормальной или её стоит оптимизировать?
Файл Demo.lua:
Файл RunDemo1.lua:
Файл RunDemo2.lua:
Содержимое файлов 3-9 аналогично, отличаются только y-координаты окна.
				В течение 7 дней можно скачать нужные демо-файлы по ссылке: Описание приводится ниже.
Файлы RunDemo1.lua, ...m RunDemo9.lua каждый имеет свои настройки и запускают общий файл Demo.lua. Каждый скрипт выводит окно и периодически с некоторым таймаутом, заданным в Demo.lua, обновляет свою таблицу на экране. Скрипты надо запускать одновременно.
Просьба к разработчикам ответить на вопрос: считается ли такая скорость отрисовки нормальной или её стоит оптимизировать?
Файл Demo.lua:
| Код | 
|---|
| ---
--- Настройки заданы в переменной config, которая к моменту запуска уже определена.
---
local interrupted = false
local tableId
local timeout = 20 -- можно уменьшать, чтобы проблема стала более явной
local nRow = 30 -- количество строк в таблице, можно увеличивать, чтобы проблема стала более явной
local nCol = 10 -- количество столбцов в таблице, можно увеличивать, чтобы проблема стала более явной
function OnInit(scriptPath)
    tableId = AllocTable()
    for colId = 1, nCol do
        AddColumn(tableId, colId, "#" .. colId, true, QTABLE_STRING_TYPE, 20)
    end
end
function OnStop()
    interrupted = true
    local tId = tableId
    tableId = nil
    if tId then
        DestroyTable(tId)
    end
end
function updateTable()
    if tableId == nil then
        return
    end
    if IsWindowClosed(tableId) then
        CreateWindow(tableId)
        SetWindowPos(tableId, config.x, config.y, config.dx, config.dy)
        for rowId = 1, nRow do
            InsertRow(tableId, rowId)
        end
    end
    local dt = os.date(" %Y-%m-%d %X", os.time())
    SetWindowCaption(tableId, config.name .. dt)
    for rowId = 1, nRow do
        for colId = 1, nCol do
            SetCell(tableId, rowId, colId, dt)
        end
    end
end
function main()
    while not interrupted do
        updateTable()
        sleep(timeout)
    end
end | 
Файл RunDemo1.lua:
| Код | 
|---|
| ---
--- Этот скрипт нужно запустить.
---
config = {
    name = "RunDemo1",
    x = 0,
    y = 0,
    dx = 1400,
    dy = 100,
}
dofile(getScriptPath() .. "/Demo.lua") | 
Файл RunDemo2.lua:
| Код | 
|---|
| ---
--- Этот скрипт нужно запустить.
---
config = {
    name = "RunDemo2",
    x = 0,
    y = 100,
    dx = 1400,
    dy = 100,
}
dofile(getScriptPath() .. "/Demo.lua") | 
Содержимое файлов 3-9 аналогично, отличаются только y-координаты окна.
 
         