Форум » GUI » TsBrowse и MT » Ответить

TsBrowse и MT

Haz: никто не занимался вопросом работы tsbrowse в отдельном потоке ? сделал Rest сервер для обработки запросов и обмена данными между своей системой 1С7 и Bitrix все в консольке, а монитор к этому серверу рисую в гуях. Через таймер все работает, отслеживается запись нового запроса в базу и tsbrows рисует новую строку не сбивая фокуса в текущей. А вот при попытке уйти от таймера на поток, столкнулся с блокировкой рабочей области, не понимаю куда можно прописать hb_dbdetach()/hb_dbRequest() в tsbrowse чтобы контролирующий поток успешно смог взять эту область , проверить на наличие изменений и вернуть обратно..

Ответов - 24, стр: 1 2 All

Haz: SergKis пишет: Т.е. ты создав окно с пустым тсб уходишь не совсем. 1) ТСБ создается и функционирует в основном процессе по алиасу "А1" 2) создается поток в котором так же открывается алиас "А1" и зацикливается с задержкой sleep поскольку алиасы разделены потоком, они друг друга не видят и не мешают , а ТСБ работает по имени не зная где он в конкретный момент ( в основном процессе или в потоке ) 3) в цикле потока пока отслеживается появление новых записей в базе и нужно ли это отображать на ТСБ. если нужно то в потоке идет корректировка ::nLen и дорисовка строки . При этом фокус ввода на самом ТСБ визуально не меняется и не моргает. Технически даже в основном процессе может выполняться редактирование ячейки и это не помешает потоку дорисовать строку. мютексы пока не использовал, т.к. нет разделяемого ресурса ( да и не задать его в ТСБ нет такого места где у ТСБ режим ожидания ) , но возможно появится по мере усложнения логики. главное опробовал механизм работы с ТСБ и одним именем алиаса

SergKis: Haz пишет 3) в цикле потока пока отслеживается появление новых записей в базе и нужно ли это отображать на ТСБ. если нужно то в потоке идет корректировка ::nLen и дорисовка строки Т.е. ты переносишь изменения в основной алиас по oBrw и меняешь :nLen ? Или в потоке с тем же алиасом весь отбор показываешь, синхронизируя по тек. записи ? Это место не очень понял.

Haz: SergKis пишет: Т.е. ты переносишь изменения в основной алиас по oBrw и меняешь :nLen ? база пополняется новыми записями из консольного сервера. монитор и настройки сделаны в гуи. Простейший монитор это окошко и тсб на нем, но нужно постоянно обновлять чтобы видеть новую статистику. Поэтому решил обновление отдать потоку. В потоке анализируется появление новых записей и есть ли место в бровсе где показать новую запись, если и то и то есть, поток пересчитывает ::nLen и рисует строчку в ТСБ. Визуально это выглядит примерно так В бровсе 3 строки , курсор на строке 2 за курсором еще одна и дальше пусто ( всего пусть помещается 20 ). В какой-то момент курсор по прежнему на строке 2 , но появляется строка 4 , затем 5. При этом можно осуществлять навигацию по ТСБ и это не мешает появлению новых строк. Когда будут заполнены все 20 строк , поток работает в холостую и не рисует больше ничего. Пока сделано так. Изменения в основной алиас не переношу , они там и так есть т.к база в SHARED , поток просто мониторит нужно ли дорисовать строчку. Как вариант - совместная работа, курсор на строке 2 ( или редактируешь ее ) и в реальном видишь как меняются ячейки в других строках ( те что меняют другие пользователи )


SergKis: Haz пишет база пополняется новыми записями из консольного сервера. Теперь понял, у тебя 3и источника. Но наверно, можно обойтись одним потоком в дальнейшем.



полная версия страницы