nesco добрый день!
Не могли бы вы объяснить чем отличаются данные компоненты в плане работы? (с потоками в том числе)
У меня есть небольшая схема code_36436.txt, если использую стандартный COM - при закрытии invalid point operation, если использую ваш COMEX - закрывается приложение без ошибок.
Хотел бы узнать причину столь странного поведения...
Этот топик читают: Гость
Ответов: 655
Рейтинг: 18
|
|||
карма: 0 |
| ||
файлы: 1 | code_36436.txt [1.3KB] [742] |
Разработчик
Ответов: 26155
Рейтинг: 2127
|
|||
Gunnman писал(а): Не могли бы вы объяснить чем отличаются данные компоненты в плане работы?COMEX не нужно управление чтением, он будет читать данные по приходу автоматически. Для этого у него есть две точки событий: onRead -- асинхронное чтение в отдельном потоке, нельзя применять с интерфейсными элементами; onSyncRead -- синхронное чтение с основным потоком, как раз для случая работы с интерфейсными элементами. Запись так же происходит не в основном потоке, а в отдельном. Gunnman писал(а): при закрытии invalid point operationНастоятельно рекомендуется закрыть отдельный поток перед выходом и не читать из отдельного потока в интерфейсный элемент. |
|||
карма: 22 |
| ||
Голосовали: | 3042 |
Ответов: 655
Рейтинг: 18
|
|||
nesco,спасибо,но не совсем понял про
не читать из отдельного потока в интерфейсный элемент Если мне требуется выводить данные из COM порта в Memo как быть в этом случае? данные onRead накапливать в StrList например, а потом другим потоком их выводить в Мемо..ну так это вроде тоже самое получается.. Можно небольшой пример? |
|||
карма: 0 |
|
Разработчик
Ответов: 26155
Рейтинг: 2127
|
|||
Gunnman писал(а): Если мне требуется выводить данные из COM порта в Memo как быть в этом случае?Ты как читаешь nesco писал(а): onSyncRead -- синхронное чтение с основным потоком, как раз для случая работы с интерфейсными элементами. onSyncRead выдает те же данные, что и onRead, но только в основном потоке, те в потоке твоего приложения. Если хочешь выдавать в Memo, то используй именно выход onSyncRead |
|||
карма: 22 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
nesco писал(а): Ты как читаешьcomex.ini писал(а): onSyncRead=В случае успешного чтения выдает в синхронном режиме прочитанную строку байт|2|Про основной поток стало известно только после допроса автора. О ComEX, кроме описания точек, нет ничего нигде - ни в Wiki ни в примерах. |
|||
карма: 25 |
|
Разработчик
Ответов: 26155
Рейтинг: 2127
|
|||
Tad писал(а): И где тут про основной поток ?Здесь нет, в ответе есть. Я дал довольно конкретный и развернутый ответ, предвидя именно вопрос про вывод в интерфейсные элементы. И после этого ответа меня снова спросили про то, на что я уже ответил, какова должна быть моя реакция? Tad писал(а): О ComEX, кроме описания точек, нет ничего нигде - ни в Wiki ни в примерах.Это, в принципе, экспериментальный компонент. Я ждал, что его кто-то развернуто протестирует, но так и не дождался. |
|||
карма: 22 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
nesco писал(а): Это, в принципе, экспериментальный компонент. На SVN "в принципе, экспериментальный компонент" nesco писал(а): Я ждал, что его кто-то развернуто протестируетКстати, даже в старой буке 2006 года выпуска COM-портов уже нет (про новое оборудование даже не говорю.) |
|||
карма: 25 |
|
Ответов: 655
Рейтинг: 18
|
|||
Я ждал, что его кто-то развернуто протестирует, но так и не дождался. Я данный компонент часто использую, стабильный, проблем не возникало (несмотря на то что допускаю ошибки). На базе данного компонента делал небольшие программы для отправки и получения СМС через 3G модемы, работал с UART, делал тестовые утилиты для купюроприемников. Что требуется для развернутого тестирования? |
|||
карма: 0 |
| ||
файлы: 1 | code_36442.txt [125B] [524] |
Разработчик
Ответов: 26155
Рейтинг: 2127
|
|||
Tad писал(а): Удивил...Гы. Я не первый -- посмотри последнюю группу вкладки интерфейсы. Tad писал(а): И как можно "развернуто протестировать" при полном отсутствии описания?Ну и что там описывать? Вот описал, сильно помогло? Tad писал(а): Кстати, даже в старой буке 2006 года выпуска COM-портов уже нет (про новое оборудование даже не говорю.)На материнке может быть хитрый разъем, который никуда не подключен. И тем не менее это не мешает их применять кому не лень. Да и преобразователи СОМ-USB еще никто не отменял. |
|||
карма: 22 |
|
Ответов: 655
Рейтинг: 18
|
|||
Кстати, даже в старой буке 2006 года выпуска COM-портов уже нет (про новое оборудование даже не говорю.) Очень много оборудования еще использует COM порты или эмуляцию COM>USB,USB>COM... Универсальный компонент для работы с устройствами USB я так понимаю в принципе тяжело реализовать, для каждого конкретного случая будет свой IC? Или же в Hiasm работа с USB практически не реализуема? |
|||
карма: 0 |
|
Разработчик
Ответов: 26155
Рейтинг: 2127
|
|||
Gunnman писал(а): несмотря на то что допускаю ошибкиАсинхронный выход может и работать с интерфейсными элементами, при условии, что хватит время между соседними onRead и перерисовками интерфейсного элемента, но делать так не корректно. ------------ Дoбавленo в 10.05: Gunnman писал(а): Или же в Hiasm работа с USB практически не реализуема?Универсального компонента не сделать, тк как у разных драйверов разный API и Gunnman писал(а): для каждого конкретного случая будет свой IC |
|||
карма: 22 |
|
Ответов: 4630
Рейтинг: 749
|
|||
карма: 26 |
|
Разработчик
Ответов: 26155
Рейтинг: 2127
|
|||
Netspirit писал(а): Предполагаю, корректно делать такЗачем в компоненте COMEX это делать, когда там предусмотрен метод onSyncRead, работающий по тому же принципу |
|||
карма: 22 |
|
Ответов: 4630
Рейтинг: 749
|
|||
Возможно в COMEX это и не так необходимо, а вообще, такое нужно, когда основная обработка выполняется в параллельном потоке, а в основном потоке нужны только небольшие действия. Нормально такое сделать, например, в компоненте Thread (с аналогичным событием) - сложно.
|
|||
карма: 26 |
|
Разработчик
Ответов: 26155
Рейтинг: 2127
|
|||
Netspirit писал(а): Нормально такое сделать, например, в компоненте Thread (с аналогичным событием) - сложно.Если выдавать не по окончанию работы, а из любого места параллельного потока, то да, такое решение может пригодиться. ------------ Дoбавленo в 13.55: Добавил компонент Synchronize на SVN. Netspirit, сделай в справке для него описание с примером |
|||
карма: 22 |
|