Интересует следующая задача: как оптимально организовать процесс логирования в многопоточной программе с помощью какого-либо текстового поля Htmlayout. Т.е. несколько потоков асинхронно обращаетюся к одному текстовому полю и добавляют строки. Тут есть два непонятных аспекта:
1) Как собственно организовать добавление строки с наименьшими затратами (функции типа add_some_text() я не нашел)? С помощью SetValue() как-то не очень элегантно выходит;
2) Как обеспечить "залипания" скроллбара текстового поля к нижнему краю?
Здравствуйте, BloodyTux, Вы писали:
BT>Здравствуйте!
BT>Интересует следующая задача: как оптимально организовать процесс логирования в многопоточной программе с помощью какого-либо текстового поля Htmlayout. Т.е. несколько потоков асинхронно обращаетюся к одному текстовому полю и добавляют строки. Тут есть два непонятных аспекта: BT>1) Как собственно организовать добавление строки с наименьшими затратами (функции типа add_some_text() я не нашел)? С помощью SetValue() как-то не очень элегантно выходит;
В зависимости от того как нужно представлять log items: как single lines или как wrapable paragraphs DOM элемент самого log может быть либо <pre> либо <div>.
BT>2) Как обеспечить "залипания" скроллбара текстового поля к нижнему краю?
new_chunk.scroll_to_view();
Замечания:
1) dom::element::scroll_to_view() операция форсирует remeasure поэтому этот вызов нужно делать или по таймеру или по idle.
2) для обращения к GUI из рабочих потоков используется htmlayout::queue.
3) надо как-то ограничивать размер log, скажем тысячью text элементов.
4) Если log в принципе безразмерный то рекомендую virtual grid: htmlayoutsdk/html_samples/grid/virtual-table.htm — он не зависит от количества log items.
Re[2]: Организация логирования в многопоточной программе
CS>В зависимости от того как нужно представлять log items: как single lines или как wrapable paragraphs DOM элемент самого log может быть либо <pre> либо <div>.
BT>>2) Как обеспечить "залипания" скроллбара текстового поля к нижнему краю?
CS>
CS>new_chunk.scroll_to_view();
CS>
CS>Замечания: CS>1) dom::element::scroll_to_view() операция форсирует remeasure поэтому этот вызов нужно делать или по таймеру или по idle. CS>2) для обращения к GUI из рабочих потоков используется htmlayout::queue. CS>3) надо как-то ограничивать размер log, скажем тысячью text элементов. CS>4) Если log в принципе безразмерный то рекомендую virtual grid: htmlayoutsdk/html_samples/grid/virtual-table.htm — он не зависит от количества log items.
Thank you very much!
Re[2]: Организация логирования в многопоточной программе
CS>В зависимости от того как нужно представлять log items: как single lines или как wrapable paragraphs DOM элемент самого log может быть либо <pre> либо <div>.
BT>>2) Как обеспечить "залипания" скроллбара текстового поля к нижнему краю?
CS>
CS>new_chunk.scroll_to_view();
CS>
CS>Замечания: CS>1) dom::element::scroll_to_view() операция форсирует remeasure поэтому этот вызов нужно делать или по таймеру или по idle. CS>2) для обращения к GUI из рабочих потоков используется htmlayout::queue. CS>3) надо как-то ограничивать размер log, скажем тысячью text элементов. CS>4) Если log в принципе безразмерный то рекомендую virtual grid: htmlayoutsdk/html_samples/grid/virtual-table.htm — он не зависит от количества log items.
Можно еще один глупый (как я полагаю) вопрос? С библиотекой только начинаю знакомиться, многое еще не прояснилось, но чувствую, что средство мощное и удобное, т.ч. мне с ним по пути =) А вопрос следующий:
Все хорошо, лог теперь есть, но как сделать его "выделяемым" при помощи мыши для копирования в буфер обмена? Я думаю, есть какой-то стандартный BEHAVIOR , который позволит превратить <div> в текстовое поле, это так?
Re[3]: Организация логирования в многопоточной программе
Здравствуйте, BloodyTux, Вы писали:
BT>Можно еще один глупый (как я полагаю) вопрос? С библиотекой только начинаю знакомиться, многое еще не прояснилось, но чувствую, что средство мощное и удобное, т.ч. мне с ним по пути =) А вопрос следующий:
Cтоит посмотреть Sciter — это тот же HTMLayout + javacript. В Sciter-е можно делать байндинг для C++ сущностей и манипулировать ими из скрипта.
Re[4]: Организация логирования в многопоточной программе
Здравствуйте, alsemm, Вы писали:
A>Cтоит посмотреть Sciter — это тот же HTMLayout + javacript. В Sciter-е можно делать байндинг для C++ сущностей и манипулировать ими из скрипта.
А как насчет совместимости, т.е. проект с использованием Htmlayout легко перегнать под Sciter ?
Re[3]: Организация логирования в многопоточной программе
Здравствуйте, BloodyTux, Вы писали:
BT> Все хорошо, лог теперь есть, но как сделать его "выделяемым" при помощи мыши для копирования в буфер обмена? Я думаю, есть какой-то стандартный BEHAVIOR , который позволит превратить <div> в текстовое поле, это так?
behavior:htmlarea; на контейнере. После этого на этом контейнере можно выделять текст.
Re[4]: Организация логирования в многопоточной программе
Здравствуйте, BloodyTux, Вы писали:
BT>Здравствуйте, alsemm, Вы писали:
A>>Cтоит посмотреть Sciter — это тот же HTMLayout + javacript. В Sciter-е можно делать байндинг для C++ сущностей и манипулировать ими из скрипта.
BT>А как насчет совместимости, т.е. проект с использованием Htmlayout легко перегнать под Sciter ?
Я не пробовал, но теоретически проблем нет никаких.