Здравствуйте, BloodyTux, Вы писали:
BT>Здравствуйте!
BT>Интересует следующая задача: как оптимально организовать процесс логирования в многопоточной программе с помощью какого-либо текстового поля Htmlayout. Т.е. несколько потоков асинхронно обращаетюся к одному текстовому полю и добавляют строки. Тут есть два непонятных аспекта:
BT>1) Как собственно организовать добавление строки с наименьшими затратами (функции типа add_some_text() я не нашел)? С помощью SetValue() как-то не очень элегантно выходит;
dom::element log = ...;
dom::element new_chunk = dom::element::create("text",some_text);
log.append(new_chunk);
В зависимости от того как нужно представлять 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.