Demnus, поделитесь проблемной схемой
Этот топик читают: Гость
Ответов: 3889
Рейтинг: 362
|
|||
карма: 1 |
|
Ответов: 26
Рейтинг: 3
|
|||
Схеммы не получается.
В начале я подумал, что могу просто передать поток из корневой схеммы в любую схемму находящуюся в одной из страниц PageControl'a и оно там выполнится. И обломался. Потом мне посоветовали спецальные точки в рамках создавать с ##. Но в итоге выполняется только схемма в текущей странице, котоаря по совместительству текущая закладка графической части элемента. Но опять же код в неактивной вкладке я выполнить не могу. Я подумал, что мне не принцыпиально где выполняется код, мне главное обновить потом содержимое элементов интерфейса, в выбранной вкладке, и все будет ок. Но выяснилось, что могу получить данные о том какя вкладка выбрана, но эвента который бы сказал, что вкладка сменилась не существует у PageControl'а хотя есть у TabControl'a. Тут я обломался второй раз. Потом я подумал, ладно, хрен с ним, я могу получать хотябы факт клика по элементу c помощью евента - onMouseDown и потом проверять не поменялся ли номер активной вкладки. И тут возник новый облом. Попытка вынести точку onMouseDown да и любых других точек эвентов компонента PageControl приводит к выскакиванию окна с ошибкой Access violation at address 05BF8E6 in module "HiAsm.exe" Read of address 00000028. Причем проблемная точка не сохраняется при копировании схеммы в буфер. И тут унынние меня постигло окончательно. ^^ |
|||
карма: 1 |
|
Ответов: 3889
Рейтинг: 362
|
|||
Demnus, всё-таки, не видя схемы, трудно однозначно что-то утверждать, но когда я писал свою на более чем 500 динамических элементов (ChildPanelEx), убедился, что переполнения стека и конфликты контекстов порою выкидывают неприятные сюрпризы. Приходилось организовывать промежуточные структуры данных, через которые основной поток программы может общаться с независимыми потоками в панелях. Похоже, именно в этом и Ваша проблема - взаимодействие с "внешним миром" динамических элементов стоит ограничивать или реализовывать другими путями. Особенно характерны проблемы с попытками одним потоком что-то менять в интерфейсе графического элемента, который обслуживается другим потоком. Вы схему-то проблемную дали бы, глядишь, решение найдётся. Не через буфер обмена, а через обменник файлами (прокрутите страницу выше, там будет "Файлообмен")
Вы поймите основной принцип - каждая вкладка - по сути - отдельная программа, которая работает условно параллельно основной и своим соседям, и подловить момент, когда, например, у одной готовы данные, а вторая ничем не занята - ваша (не всегда простая) задача |
|||
карма: 1 |
|
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
1nd1g0, вот ты мне расскажи -- откуда берутся другие потоки в приложении, если ты там их не создавал
------------ Дoбавленo в 19.58: И куда ты стер свою схему ------------ Дoбавленo в 20.00: 1nd1g0 писал(а): Приходилось организовывать промежуточные структуры данных, через которые основной поток программы может общаться с независимыми потоками в панеляхВот откуда это высосано, из какого пальца, сам насоздавал кучу потоков или думаешь мы каждый класс создаем в своем потоке |
|||
карма: 22 |
|
Ответов: 26
Рейтинг: 3
|
|||
Первый пример, как я думал что но будет работать, в первом посте этой ветки.
Второй пример как я хотел сделать с ## опять же не могу привести, по той причине что не сущчествует точки ##execute или ##update и т.п. Равно, как не существует эвента OnChange например, который выдавал бы в поток событие по факту смены страницы, я уж не гворю о такой роскоши чтоб в потоке еще и номер страницы был бы... 3ий пример.
В элемнте PageControl, как я написал уже выше попытка добавить точку onMouseDown приводит к тому, что при наведении на нее мыши вываливается вышеприведенная ошибка. Как я написал, проблемная точка не сохраняется ни в файл, ни при копировании в буфер, поэтому чтоб убедится вам придется создать ее все равно в ручную. Точнее судя по тексту приведенного кода, скопироватся то она скопировалась но не вставляется... |
|||
карма: 1 |
| ||
файлы: 1 | code_24436.txt [235B] [442] |
Ответов: 16884
Рейтинг: 1239
|
|||
1nd1g0 писал(а): поделитесь проблемной схемой |
|||
карма: 25 |
|
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
Demnus писал(а): В элемнте PageControl, как я написал уже выше попытка добавить точку onMouseDown приводит к тому, что при наведении на нее мыши вываливается вышеприведенная ошибкаDemnus, я так понимаю, что у вас версия с инсталлятора Настоятельно рекомендуется обновиться до самой последней ночной сборки -- http://hiasm.com/down/night-builds/HiAsm_4.04b185_2011-06-19.exe |
|||
карма: 22 |
|
Ответов: 3889
Рейтинг: 362
|
|||
nesco, так он же их создаёт, я так понимаю.
Схема стёрлась из-за одного из багов движка форума - прилипла как вложение к сообшению совершенно в другой ветке, при чистке сообщения стёрлась и там, и тут( Там простейшее создание новых вкладок по ##Add с примером передачи данных внутрь текущей вкладки, а человеку тут надо ручное создание, похоже, а не автоматическое. Жду, когда схему покажут, наконец. Человека можно понять, почему он недоумевает. Я вот когда шарики писал, словил их пачку, фатальные ошибки переполнения стека возникали там, где не ждали, как будто паразитная рекурсия вылезала, хотя я простейшую схему со счётчиками в контейнере делал, без связей с внешним миром на тот момент (то есть сама себя она не вызывала, естественно). Просто внутри схемы ставишь ещё одну связь на счётчик - всё, стека не хватает. Убирал - пропадал вылет. Триггер в текущей выбранной вложенной схеме было невозможно опросить точкой состояния снизу (выходил NULL, хотя на трассировке с дебагом выходило правильное значение). Обошёл все глюки, и заработало. Ньюансов много, потому надо посмотреть схему и разобраться, какая из "особенностей" вылезла на этот раз. Со своей схемой я только в полноценном дебаггере с дизассемблером нашёл причину вылетов, разобрав код классов, которые на деле, в машинных кодах, реализуются обычными процедурами с параметрами на стеке, вот стека-то и не хватало при определённом уровне вложенности и количестве объектов. Ладно, не будем человека пугать заранее. |
|||
карма: 1 |
|
Ответов: 26
Рейтинг: 3
|
|||
Обновился, появились новые компоненты у некоторых иконки сменились, но ошибка при наведении на точку onMouseDown компонента PageControl осталась.
Хочу обратить внимание это ошибка не скомпилированной програмки, не ошибка при компиляции, а ошибка среды, в момент простого наведения мыши на точку. |
|||
карма: 1 |
|
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
Demnus писал(а): Хочу обратить внимание это ошибка не скомпилированной програмки, не ошибка при компиляции, а ошибка среды, в момент простого наведения мыши на точкуУ меня нет такого при открытии точки onMouseDown, никакой ошибки не выдает. Сборка ставилась заново или поверх, если поверх, то такое может затесаться из старой версии ------------ Дoбавленo в 20.26: 1nd1g0 писал(а): Просто внутри схемы ставишь ещё одну связь на счётчик - всё, стека не хватаетДавно известная проблема, колцевать у нас в схемах нельзя, если удалять самого себя, то только из другой очереди событий |
|||
карма: 22 |
|
Ответов: 3889
Рейтинг: 362
|
|||
Demnus, добавляете точку, сохраняете схему, перезапускаете среду, открываете, наводите - если вылетает, дайте нам через файлообменник Вашу схему в виде SHA
------------ Дoбавленo в 20.32: nesco писал(а): если удалять самого себя, то только из другой очереди событийТак я это понимаю, и что такое контекст потока знаю, потому в стеке копил идентификаторы потоков на смерть и подчищал их ресурсы перед созданием новых шариков уже в основном цикле. Вылетал он не от рекурсии, а от большого количества инстанций и общего стека, т.к. на стеке контексты каждой машиннокодовой процедуры элемента, выглядящей в схеме как очередная его копия, хранятся и где-то что-то забывало подчищать стек после выхода из одной такой процедуры, он тёк, тёк да и утекал до переполнения. |
|||
карма: 1 |
|
Ответов: 26
Рейтинг: 3
|
|||
Переставил начисто. Тоже самое.
Win7sp1 x86, cor2quad q6600, 4gb ram скрин http://forum.hiasm.com/forum_serv.php?q=56&id=2510 схемма http://forum.hiasm.com/forum_serv.php?q=56&id=2511 |
|||
карма: 1 |
|
Ответов: 3889
Рейтинг: 362
|
|||
Demnus,
Так делать? |
|||
карма: 1 |
| ||
файлы: 1 | onmousedown.png [12KB] [679] |
Ответов: 26
Рейтинг: 3
|
|||
Нет, так ошибку не выдает, но эвент не срабатывает.
Ошибку выдает если точку создавать у элемента в корневой схемме. |
|||
карма: 1 |
|
Ответов: 3889
Рейтинг: 362
|
|||
Demnus, да, не срабатывает, Вы правы. В общем, Вы не пробовали использовать TabControl + статическиединамические панели? Почему выбран именно этот компонент?
|
|||
карма: 1 |
|