Re: Организация логирования в многопоточной программе
От: c-smile Канада http://terrainformatica.com
Дата: 08.02.10 00:46
Оценка:
Здравствуйте, 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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.