При использовании приведённых ниже демонстрационных скриптов наблюдается повышенная нагрузка на 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-координаты окна.