HTMLayout и многопоточность
От: AntiB  
Дата: 05.01.10 13:02
Оценка:
Доброе время суток!

У меня следующая проблема:
Используя HTMLayout версии 3.3.1.41 и имею таблицу <table> и пару потоков. Есть 1 гуи поток который все сообщения обрабатывает:

    while( (result = GetMessage( &msg, (HWND)NULL, 0, 0 )) != 0) {

        if (result == -1)
            return result;

        htmlayout::queue::execute();

        TranslateMessage( &msg );
        DispatchMessage( &msg );

    }

и есть другие потоки которые должны изменять таблицу, делаю они это используя очередь (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% обеспеченно!

Вопрос — как можно обновить элемент?

Заранее спасибо!
Re: HTMLayout и многопоточность
От: c-smile Канада http://terrainformatica.com
Дата: 05.01.10 21:32
Оценка:
Здравствуйте, AntiB, Вы писали:

AB>У меня следующая проблема:

AB>Используя HTMLayout версии 3.3.1.41 и имею таблицу <table> и пару потоков. Есть 1 гуи поток который все сообщения обрабатывает:

AB>
AB>    while( (result = GetMessage( &msg, (HWND)NULL, 0, 0 )) != 0) {

AB>        if (result == -1)
AB>            return result;

AB>        htmlayout::queue::execute();

AB>        TranslateMessage( &msg );
AB>        DispatchMessage( &msg );

AB>    }
AB>


Это должно работать если окно создано в этом GUI thread (т.е. в том же потоке который и исполняет этот message pump)
Re[2]: HTMLayout и многопоточность
От: AntiB  
Дата: 06.01.10 14:44
Оценка:
Здравствуйте, c-smile, Вы писали:

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


AB>>У меня следующая проблема:

AB>>Используя HTMLayout версии 3.3.1.41 и имею таблицу <table> и пару потоков. Есть 1 гуи поток который все сообщения обрабатывает:

AB>>
AB>>    while( (result = GetMessage( &msg, (HWND)NULL, 0, 0 )) != 0) {

AB>>        if (result == -1)
AB>>            return result;

AB>>        htmlayout::queue::execute();

AB>>        TranslateMessage( &msg );
AB>>        DispatchMessage( &msg );

AB>>    }
AB>>


CS>Это должно работать если окно создано в этом GUI thread (т.е. в том же потоке который и исполняет этот message pump)


Не работает, не обновляет элементы (ни таблицу, ни див) пока не пошевелить мышкой или кликнуть кнопкой.
Re[3]: HTMLayout и многопоточность
От: c-smile Канада http://terrainformatica.com
Дата: 06.01.10 17:04
Оценка:
Здравствуйте, AntiB, Вы писали:

Если соберешь минимальный пример где проблема воспроизводима — то фикс будет на следующий день.
Re[4]: HTMLayout и многопоточность
От: AntiB  
Дата: 08.01.10 10:33
Оценка:
Здравствуйте, 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 потока (обработка нажатие на линк/кнопку (неважно)). Попробуйте написать/изменить пример с моим классом.

Если ничего не получиться, соберу полноценный проект.

Заранее Спасибо!
С Уважением, AntiB
Re[5]: HTMLayout и многопоточность
От: AntiB  
Дата: 08.01.10 11:36
Оценка:
Хотя вариант с HTMLayoutSetElementInnerText16, HTMLayoutUpdateElement — не все норм, я обновляю <span>Тест для обновление</span> — и если сначала был длинный текст, а потом маленький(пример):
Было:
Длинный текст
Изменил на:
Просто текст
Выводит:
Просто текстт

как видно, не затеряется последний символ. Лечиться HTMLayoutUpdateWindow, но согласитесь, если часто вызывать HTMLayoutUpdateWindow будет много процессорного времени кушать программа.
Re[6]: HTMLayout и многопоточность
От: c-smile Канада http://terrainformatica.com
Дата: 09.01.10 01:21
Оценка:
Здравствуйте, AntiB, Вы писали:

AB>как видно, не затеряется последний символ. Лечиться HTMLayoutUpdateWindow, но согласитесь, если часто вызывать HTMLayoutUpdateWindow будет много процессорного времени кушать программа.


Когда к engine приходит запрос на изменение DOM то он ставит запрос в очередь на update и вызывает:
  ::SetTimer(hwnd, 0xFFFFFFAC,1);


Проверь, доходит ли WM_TIMER с таким id до меня или нет. Дело в том что WM_TIMER это очень низко-приритетное сообщение
и система может таймеры откладывать если процесс чем-то еще занят.

Гарантирванно показать информацию пользователю это вызывать HTMLayoutUpdateWindow().
Когда её звать — то тебе решать на основе лгики твоего приложения.
Например раз в секунду или на каждый третий раз или вообще делать dom манипуляции не по одному а некими пакетами с HTMLayoutUpdateWindow().

Короче — или давай пример. Дистанционно гадать это не ко мне.
Re[7]: HTMLayout и многопоточность
От: AntiB  
Дата: 11.01.10 13:59
Оценка:
Здравствуйте, 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?

http://files.rsdn.ru/90740/htmlayout_bug_check.rar
Re[8]: HTMLayout и многопоточность
От: c-smile Канада http://terrainformatica.com
Дата: 11.01.10 20:44
Оценка:
Здравствуйте, AntiB, Вы писали:

AB>Сделал пример. Он простой, но рабочий.


Ага, спасибо. Проблема у меня.

AB>А не хотите сделать свой проект opensource?


Я тут и у себя на форуме уже несколько раз отвечал на этот вопрос.
Если коротко то opensource инфраструктура стоит денег. Если найдется спонсор — рассмотрю вопрос.
За разработку Mozilla like license лоеры у меня просили что-то около 14тыс зеленых. Я не понимаю зачем я должен отдавать свои кровные за это и что мне это даст.
Есть еще несколько объективных причин связанных с основными клиентами с которыми я связан контрактами и которые (клиенты) негативно относятся к OpenSource. Опять же из-за лицензий и стоимости разбирательства с этим всем. Короче open source это далеко не бесплатное удовольствие. Если на круг считать то как правило использование OpenSource кода комерческой компании стоит дороже чем PrivateSource. Причем иногда стоимость неизвестна заранее. Мне тут рассказали пару грустных историй про "два туза на мизере".
Re[8]: HTMLayout и многопоточность
От: c-smile Канада http://terrainformatica.com
Дата: 11.01.10 23:44
Оценка:
Здравствуйте, AntiB, Вы писали:

AB>Сделал пример. Он простой, но рабочий. А не хотите сделать свой проект opensource?


AB>http://files.rsdn.ru/90740/htmlayout_bug_check.rar


А можно я твой пример в SDK добавлю? А то мне как раз не хватало там чего-нибудь с threading.
Re[9]: HTMLayout и многопоточность
От: AntiB  
Дата: 12.01.10 11:50
Оценка:
Здравствуйте, c-smile, Вы писали:

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


AB>>Сделал пример. Он простой, но рабочий. А не хотите сделать свой проект opensource?


AB>>http://files.rsdn.ru/90740/htmlayout_bug_check.rar


CS>А можно я твой пример в SDK добавлю? А то мне как раз не хватало там чего-нибудь с threading.


нет проблем, только там код на быструю руку написан, без проверок и т.д. А когда можно ожидать баг-фикс?
Re[10]: HTMLayout и многопоточность
От: c-smile Канада http://terrainformatica.com
Дата: 12.01.10 19:42
Оценка:
Здравствуйте, AntiB, Вы писали:

AB>Здравствуйте, c-smile, Вы писали:


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


AB>>>Сделал пример. Он простой, но рабочий. А не хотите сделать свой проект opensource?


AB>>>http://files.rsdn.ru/90740/htmlayout_bug_check.rar


CS>>А можно я твой пример в SDK добавлю? А то мне как раз не хватало там чего-нибудь с threading.


AB>нет проблем, только там код на быструю руку написан, без проверок и т.д. А когда можно ожидать баг-фикс?


Сегодня, завтра.
Re[11]: HTMLayout и многопоточность
От: AntiB  
Дата: 14.01.10 19:39
Оценка:
Здравствуйте, 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, но у меня по прежнему не работает апдейт, у вас работает? если да — вышлите мне пожалуйста ваш вариант.

Заранее спасибо!
Re[9]: HTMLayout и многопоточность
От: Cyberax Марс  
Дата: 14.01.10 19:42
Оценка:
Здравствуйте, c-smile, Вы писали:

AB>>А не хотите сделать свой проект opensource?

CS>Я тут и у себя на форуме уже несколько раз отвечал на этот вопрос.
CS>Если коротко то opensource инфраструктура стоит денег. Если найдется спонсор — рассмотрю вопрос.
CS>За разработку Mozilla like license лоеры у меня просили что-то около 14тыс зеленых. Я не понимаю зачем я должен отдавать свои кровные за это и что мне это даст.
Бизнес-предложение — опиши что тебе надо от лицензии, если не будет чего-то экстраординарного, то попробую помочь.

CS>Есть еще несколько объективных причин связанных с основными клиентами с которыми я связан контрактами и которые (клиенты) негативно относятся к OpenSource. Опять же из-за лицензий и стоимости разбирательства с этим всем. Короче open source это далеко не бесплатное удовольствие. Если на круг считать то как правило использование OpenSource кода комерческой компании стоит дороже чем PrivateSource. Причем иногда стоимость неизвестна заранее. Мне тут рассказали пару грустных историй про "два туза на мизере".

FUD, похоже....

PS: порт на Линукс прогрессирует, к концу месяца будет HTMLite со сменяемыми движками работать...
Sapienti sat!
Re[12]: HTMLayout и многопоточность
От: c-smile Канада http://terrainformatica.com
Дата: 15.01.10 01:45
Оценка:
AB>Насколько я понимаю вышла новая версия HTMLayout, но у меня по прежнему не работает апдейт, у вас работает? если да — вышлите мне пожалуйста ваш вариант.

htmlayout log file (с датами!) здесь:
http://www.terrainformatica.com/htmlayout/logfile.whtm
RSS feed на изменения этого log file здесь:
http://www.terrainformatica.com/rss.php

ответ на твой вопрос — нет, еще билд не строил.
Re[13]: HTMLayout и многопоточность
От: AntiB  
Дата: 16.01.10 11:07
Оценка:
Здравствуйте, 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>ответ на твой вопрос — нет, еще билд не строил.


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