У меня следующая проблема:
Используя HTMLayout версии 3.3.1.41 и имею таблицу <table> и пару потоков. Есть 1 гуи поток который все сообщения обрабатывает:
и есть другие потоки которые должны изменять таблицу, делаю они это используя очередь (htmlayout::queue), то есть создается класс который потом становиться в очередь.
У меня таблица следующего вида:
<table>
<tr><th>Some text</th></tr>
</table>
и хочу добавить еще одну строку используя HTMLayoutSetElementHtml (для <table>) и where=SIH_APPEND_AFTER_LAST или например HTMLayoutSetElementInnerText16 для тега <div>, после этого делаю HTMLayoutUpdateElement (как только не пробовал, renderNow=TRUE, renderNow=FALSE, эффект тот же — не перерисовывает пока не подергать мышкой) если использовать HTMLayoutUpdateWindow — работает, но если часто вызывать — процессор 50% обеспеченно!
Здравствуйте, AntiB, Вы писали:
AB>У меня следующая проблема: AB>Используя HTMLayout версии 3.3.1.41 и имею таблицу <table> и пару потоков. Есть 1 гуи поток который все сообщения обрабатывает:
AB>
Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, AntiB, Вы писали:
AB>>У меня следующая проблема: AB>>Используя HTMLayout версии 3.3.1.41 и имею таблицу <table> и пару потоков. Есть 1 гуи поток который все сообщения обрабатывает:
AB>>
Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, AntiB, Вы писали:
CS>Если соберешь минимальный пример где проблема воспроизводима — то фикс будет на следующий день.
полноценный пример долго собирать:
class AsyncSetText: public gui_task {
private:
HELEMENT HElement;
std::wstring str;
public:
AsyncSetText( HELEMENT he, std::wstring Str ) { AsyncSetText::HElement = he;
AsyncSetText::str = Str; }
virtual void exec() { HTMLayoutSetElementInnerText16( AsyncSetText::HElement,
AsyncSetText::str.c_str(),
AsyncSetText::str.length() );
HTMLayoutUpdateElement( AsyncSetText::HElement,
TRUE ); } // здесь TRUE или FALSE - нету разницы в результате
};
Так создаю новый объект и добавляю в очередь (hWnd — это хендл окна (думаю и так понятно), he — HELEMENT нужного элемента):
queue::push( new AsyncSetText( he, Str ),
hWnd );
Если так делать — не работает.
Пробовал в том же месте где этот код не работает вставить просто: HTMLayoutSetElementInnerText16, HTMLayoutUpdateElement — все норм, но проблема в том что это место вызывается с GUI потока (обработка нажатие на линк/кнопку (неважно)). Попробуйте написать/изменить пример с моим классом.
Если ничего не получиться, соберу полноценный проект.
Хотя вариант с HTMLayoutSetElementInnerText16, HTMLayoutUpdateElement — не все норм, я обновляю <span>Тест для обновление</span> — и если сначала был длинный текст, а потом маленький(пример):
Было:
Длинный текст
Изменил на:
Просто текст
Выводит:
Просто текстт
как видно, не затеряется последний символ. Лечиться HTMLayoutUpdateWindow, но согласитесь, если часто вызывать HTMLayoutUpdateWindow будет много процессорного времени кушать программа.
Здравствуйте, AntiB, Вы писали:
AB>как видно, не затеряется последний символ. Лечиться HTMLayoutUpdateWindow, но согласитесь, если часто вызывать HTMLayoutUpdateWindow будет много процессорного времени кушать программа.
Когда к engine приходит запрос на изменение DOM то он ставит запрос в очередь на update и вызывает:
::SetTimer(hwnd, 0xFFFFFFAC,1);
Проверь, доходит ли WM_TIMER с таким id до меня или нет. Дело в том что WM_TIMER это очень низко-приритетное сообщение
и система может таймеры откладывать если процесс чем-то еще занят.
Гарантирванно показать информацию пользователю это вызывать HTMLayoutUpdateWindow().
Когда её звать — то тебе решать на основе лгики твоего приложения.
Например раз в секунду или на каждый третий раз или вообще делать dom манипуляции не по одному а некими пакетами с HTMLayoutUpdateWindow().
Короче — или давай пример. Дистанционно гадать это не ко мне.
Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, AntiB, Вы писали:
AB>>как видно, не затеряется последний символ. Лечиться HTMLayoutUpdateWindow, но согласитесь, если часто вызывать HTMLayoutUpdateWindow будет много процессорного времени кушать программа.
CS>Когда к engine приходит запрос на изменение DOM то он ставит запрос в очередь на update и вызывает: CS>
CS> ::SetTimer(hwnd, 0xFFFFFFAC,1);
CS>
CS>Проверь, доходит ли WM_TIMER с таким id до меня или нет. Дело в том что WM_TIMER это очень низко-приритетное сообщение CS>и система может таймеры откладывать если процесс чем-то еще занят.
CS>Гарантирванно показать информацию пользователю это вызывать HTMLayoutUpdateWindow(). CS>Когда её звать — то тебе решать на основе лгики твоего приложения. CS>Например раз в секунду или на каждый третий раз или вообще делать dom манипуляции не по одному а некими пакетами с HTMLayoutUpdateWindow().
CS>Короче — или давай пример. Дистанционно гадать это не ко мне.
Сделал пример. Он простой, но рабочий. А не хотите сделать свой проект opensource?
Здравствуйте, AntiB, Вы писали:
AB>Сделал пример. Он простой, но рабочий.
Ага, спасибо. Проблема у меня.
AB>А не хотите сделать свой проект opensource?
Я тут и у себя на форуме уже несколько раз отвечал на этот вопрос.
Если коротко то opensource инфраструктура стоит денег. Если найдется спонсор — рассмотрю вопрос.
За разработку Mozilla like license лоеры у меня просили что-то около 14тыс зеленых. Я не понимаю зачем я должен отдавать свои кровные за это и что мне это даст.
Есть еще несколько объективных причин связанных с основными клиентами с которыми я связан контрактами и которые (клиенты) негативно относятся к OpenSource. Опять же из-за лицензий и стоимости разбирательства с этим всем. Короче open source это далеко не бесплатное удовольствие. Если на круг считать то как правило использование OpenSource кода комерческой компании стоит дороже чем PrivateSource. Причем иногда стоимость неизвестна заранее. Мне тут рассказали пару грустных историй про "два туза на мизере".
Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, AntiB, Вы писали:
AB>>Сделал пример. Он простой, но рабочий. А не хотите сделать свой проект opensource?
AB>>http://files.rsdn.ru/90740/htmlayout_bug_check.rar
CS>А можно я твой пример в SDK добавлю? А то мне как раз не хватало там чего-нибудь с threading.
нет проблем, только там код на быструю руку написан, без проверок и т.д. А когда можно ожидать баг-фикс?
Здравствуйте, AntiB, Вы писали:
AB>Здравствуйте, c-smile, Вы писали:
CS>>Здравствуйте, AntiB, Вы писали:
AB>>>Сделал пример. Он простой, но рабочий. А не хотите сделать свой проект opensource?
AB>>>http://files.rsdn.ru/90740/htmlayout_bug_check.rar
CS>>А можно я твой пример в SDK добавлю? А то мне как раз не хватало там чего-нибудь с threading.
AB>нет проблем, только там код на быструю руку написан, без проверок и т.д. А когда можно ожидать баг-фикс?
Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, AntiB, Вы писали:
AB>>Здравствуйте, c-smile, Вы писали:
CS>>>Здравствуйте, AntiB, Вы писали:
AB>>>>Сделал пример. Он простой, но рабочий. А не хотите сделать свой проект opensource?
AB>>>>http://files.rsdn.ru/90740/htmlayout_bug_check.rar
CS>>>А можно я твой пример в SDK добавлю? А то мне как раз не хватало там чего-нибудь с threading.
AB>>нет проблем, только там код на быструю руку написан, без проверок и т.д. А когда можно ожидать баг-фикс?
CS>Сегодня, завтра.
Насколько я понимаю вышла новая версия HTMLayout, но у меня по прежнему не работает апдейт, у вас работает? если да — вышлите мне пожалуйста ваш вариант.
Здравствуйте, c-smile, Вы писали:
AB>>А не хотите сделать свой проект opensource? CS>Я тут и у себя на форуме уже несколько раз отвечал на этот вопрос. CS>Если коротко то opensource инфраструктура стоит денег. Если найдется спонсор — рассмотрю вопрос. CS>За разработку Mozilla like license лоеры у меня просили что-то около 14тыс зеленых. Я не понимаю зачем я должен отдавать свои кровные за это и что мне это даст.
Бизнес-предложение — опиши что тебе надо от лицензии, если не будет чего-то экстраординарного, то попробую помочь.
CS>Есть еще несколько объективных причин связанных с основными клиентами с которыми я связан контрактами и которые (клиенты) негативно относятся к OpenSource. Опять же из-за лицензий и стоимости разбирательства с этим всем. Короче open source это далеко не бесплатное удовольствие. Если на круг считать то как правило использование OpenSource кода комерческой компании стоит дороже чем PrivateSource. Причем иногда стоимость неизвестна заранее. Мне тут рассказали пару грустных историй про "два туза на мизере".
FUD, похоже....
PS: порт на Линукс прогрессирует, к концу месяца будет HTMLite со сменяемыми движками работать...
AB>Насколько я понимаю вышла новая версия HTMLayout, но у меня по прежнему не работает апдейт, у вас работает? если да — вышлите мне пожалуйста ваш вариант.
Здравствуйте, c-smile, Вы писали:
AB>>Насколько я понимаю вышла новая версия HTMLayout, но у меня по прежнему не работает апдейт, у вас работает? если да — вышлите мне пожалуйста ваш вариант.
CS>htmlayout log file (с датами!) здесь: CS>http://www.terrainformatica.com/htmlayout/logfile.whtm CS>RSS feed на изменения этого log file здесь: CS>http://www.terrainformatica.com/rss.php
CS>ответ на твой вопрос — нет, еще билд не строил.
как я понял, фикс еще не готов, хочу поинтересоваться когда будет готов? хочу побыстрее дописать программу