Организация логирования в многопоточной программе
От: BloodyTux  
Дата: 07.02.10 10:16
Оценка:
Здравствуйте!

Интересует следующая задача: как оптимально организовать процесс логирования в многопоточной программе с помощью какого-либо текстового поля Htmlayout. Т.е. несколько потоков асинхронно обращаетюся к одному текстовому полю и добавляют строки. Тут есть два непонятных аспекта:
1) Как собственно организовать добавление строки с наименьшими затратами (функции типа add_some_text() я не нашел)? С помощью SetValue() как-то не очень элегантно выходит;
2) Как обеспечить "залипания" скроллбара текстового поля к нижнему краю?

Буду благодарен за совет!
лог логирование
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.
Re[2]: Организация логирования в многопоточной программе
От: BloodyTux  
Дата: 08.02.10 12:11
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>
CS>dom::element log = ...;
CS>dom::element new_chunk = dom::element::create("text",some_text);
CS>log.append(new_chunk); 
CS>


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]: Организация логирования в многопоточной программе
От: BloodyTux  
Дата: 08.02.10 14:18
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>
CS>dom::element log = ...;
CS>dom::element new_chunk = dom::element::create("text",some_text);
CS>log.append(new_chunk); 
CS>


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]: Организация логирования в многопоточной программе
От: alsemm Россия  
Дата: 08.02.10 16:01
Оценка:
Здравствуйте, BloodyTux, Вы писали:

BT>Можно еще один глупый (как я полагаю) вопрос? С библиотекой только начинаю знакомиться, многое еще не прояснилось, но чувствую, что средство мощное и удобное, т.ч. мне с ним по пути =) А вопрос следующий:

Cтоит посмотреть Sciter — это тот же HTMLayout + javacript. В Sciter-е можно делать байндинг для C++ сущностей и манипулировать ими из скрипта.
Re[4]: Организация логирования в многопоточной программе
От: BloodyTux  
Дата: 08.02.10 16:44
Оценка:
Здравствуйте, alsemm, Вы писали:

A>Cтоит посмотреть Sciter — это тот же HTMLayout + javacript. В Sciter-е можно делать байндинг для C++ сущностей и манипулировать ими из скрипта.


А как насчет совместимости, т.е. проект с использованием Htmlayout легко перегнать под Sciter ?
Re[3]: Организация логирования в многопоточной программе
От: c-smile Канада http://terrainformatica.com
Дата: 08.02.10 16:57
Оценка:
Здравствуйте, BloodyTux, Вы писали:

BT> Все хорошо, лог теперь есть, но как сделать его "выделяемым" при помощи мыши для копирования в буфер обмена? Я думаю, есть какой-то стандартный BEHAVIOR , который позволит превратить <div> в текстовое поле, это так?


behavior:htmlarea; на контейнере. После этого на этом контейнере можно выделять текст.
Re[4]: Организация логирования в многопоточной программе
От: BloodyTux  
Дата: 08.02.10 17:12
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>behavior:htmlarea; на контейнере. После этого на этом контейнере можно выделять текст.


Еще раз спасибо.
Re[5]: Организация логирования в многопоточной программе
От: alsemm Россия  
Дата: 08.02.10 19:11
Оценка:
Здравствуйте, BloodyTux, Вы писали:

BT>Здравствуйте, alsemm, Вы писали:


A>>Cтоит посмотреть Sciter — это тот же HTMLayout + javacript. В Sciter-е можно делать байндинг для C++ сущностей и манипулировать ими из скрипта.


BT>А как насчет совместимости, т.е. проект с использованием Htmlayout легко перегнать под Sciter ?

Я не пробовал, но теоретически проблем нет никаких.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.