Работа в Цинке с несколькими COM-портами
Запись от chingachgoog размещена 17.12.2009 в 20:51
Цинк, к сожалению умеет работать только с одним COM-портом.
Оттого класс mdm.COMPort статичный (по-крайней мере исходя из мануала).
При попытке открыть новый COM-порт, старый просто начинает игнорироваться.
Что же делать, когда надо работать с несколькими COM-портами?
Опробованное мной решение - запуск дополнительного (невидимого) Цинк-приложения, основная функция которого - работа с COM-портом и связь с основным Цинк-приложением через LocalConnection.
Собственно все. Работает довольно стабильно.
Ниже будут интересные моменты связанные с этим способом.
Всего комментариев 7
Комментарии
18.12.2009 09:19 | |
Я не понял, ты еще один ехе запускаешь? Вот из-за чего сыр-бор)).
А дочернюю форму просто сделать не пробовал? Ну, типа MainForm - это свф с кодом для взаимодействия с портом СОМ1, SubForm1 - это свф с кодом для для взаимодействия с портом СОМ2. Дочернюю форму тупо делать невидимой, или через mdm.Forms.имя_формы.hide() или в настройках проекта галочку Size/Position -> Form Behavior -> Visible не ставить. И общаться с оной гораздо было бы удобнее через mdm.Forms.formName.callFunction() (ну, впрочем, это уже детали). Я как-то давненько проверял - код в каждой форме исполняется отдельным потоком, так что коннекты к портам не должны накладываться друг на друга. Есть правда трабла: код в дочернй форме не начнет исполняться, пока ее не покажешь. Но это лечится. Да, еще есть в настройках проекта галочка PC Executable Settings -> Do not show in Taskbar. Там же, кстати и Show in Tray. Так что без лишних телодвижений можно написать что-то типа сервиса, т.е. программки, которая висит в трее, по клику или событию разворачивается, а то и вообще не видна)). Даешь "каспера" на флэше!! Смерть шпиёнам!! |
|
Обновил(-а) alexcon314 18.12.2009 в 09:24
|
18.12.2009 10:50 | |
Цитата:
Да, еще есть в настройках проекта галочка PC Executable Settings -> Do not show in Taskbar.
Цитата:
А дочернюю форму просто сделать не пробовал?
Ну, типа MainForm - это свф с кодом для взаимодействия с портом СОМ1, SubForm1 - это свф с кодом для для взаимодействия с портом СОМ2. Хотя я не стал долго копать в этом направлении. Присмотрюсь еще раз. Обе формы у меня были видимыми... add: Хотя не уверен, что даже если так работает (через субформу), то это мне поможет. Мне заранее не известно число COM-портов, с которыми придется работать. Поэтому мой экзешник можно запускать нужное число раз - по числу COM-портов. В Цинке разве можно динамически создавать субформы? Можно, конечно, создать процесс mdm.Process.create(), но как туда подгрузить код? |
|
Обновил(-а) chingachgoog 18.12.2009 в 11:18
|
18.12.2009 12:40 | |
В тройке можно динамически создавать субформы, параметром указав свф для нее, насколько помню. В двойке нельзя. Но это.. можно зашить форм по максимуму, на мильен же их надо.
Насчет Цитата:
Это сразу пробывал. Но не вышло. Мне показалось, что mdm.COMPort - это один единственный метод/класс оболочки и не важно в каком окне крутится флеш-плеер.
|
|
Обновил(-а) alexcon314 18.12.2009 в 12:45
|
Последние записи от chingachgoog
- Работа в Цинке с несколькими COM-портами (17.12.2009)
- ASnative. Новые находки. Примеры применения. (02.06.2009)
- Решение проблемы ввода кириллицы на прозрачном фоне (20.05.2009)
- Полиморфизм (03.04.2009)
- Спасибо форуму Флешер.ру! (27.03.2009)