Вверх ↑
Этот топик читают: Гость
Ответов: 655
Рейтинг: 18
#1: 2015-10-25 22:17:11 ЛС | профиль | цитата
nesco добрый день!

Не могли бы вы объяснить чем отличаются данные компоненты в плане работы? (с потоками в том числе)

У меня есть небольшая схема code_36436.txt, если использую стандартный COM - при закрытии invalid point operation, если использую ваш COMEX - закрывается приложение без ошибок.

Хотел бы узнать причину столь странного поведения...


карма: 0

0
файлы: 1code_36436.txt [1.3KB] [385]
vip
#1.1контекстная реклама от партнеров
Разработчик
Ответов: 25681
Рейтинг: 2087
#2: 2015-10-25 23:26:52 ЛС | профиль | цитата
Gunnman писал(а):
Не могли бы вы объяснить чем отличаются данные компоненты в плане работы?

COMEX не нужно управление чтением, он будет читать данные по приходу автоматически. Для этого у него есть две точки событий: onRead -- асинхронное чтение в отдельном потоке, нельзя применять с интерфейсными элементами; onSyncRead -- синхронное чтение с основным потоком, как раз для случая работы с интерфейсными элементами. Запись так же происходит не в основном потоке, а в отдельном.

Gunnman писал(а):
при закрытии invalid point operation

Настоятельно рекомендуется закрыть отдельный поток перед выходом и не читать из отдельного потока в интерфейсный элемент.
карма: 20

1
Голосовали:3042
Ответов: 655
Рейтинг: 18
#3: 2015-10-26 15:24:56 ЛС | профиль | цитата
nesco,спасибо,но не совсем понял про
не читать из отдельного потока в интерфейсный элемент


Если мне требуется выводить данные из COM порта в Memo как быть в этом случае? данные onRead накапливать в StrList например, а потом другим потоком их выводить в Мемо..ну так это вроде тоже самое получается..
Можно небольшой пример?
карма: 0

0
Разработчик
Ответов: 25681
Рейтинг: 2087
#4: 2015-10-26 16:19:48 ЛС | профиль | цитата
Gunnman писал(а):
Если мне требуется выводить данные из COM порта в Memo как быть в этом случае?

Ты как читаешь
nesco писал(а):
onSyncRead -- синхронное чтение с основным потоком, как раз для случая работы с интерфейсными элементами.

onSyncRead выдает те же данные, что и onRead, но только в основном потоке, те в потоке твоего приложения. Если хочешь выдавать в Memo, то используй именно выход onSyncRead
карма: 20

0
Ответов: 16884
Рейтинг: 1237
#5: 2015-10-26 23:00:31 ЛС | профиль | цитата
nesco писал(а):
Ты как читаешь
То, что понятно автору, совсем не понятно читателю.
comex.ini писал(а):
onSyncRead=В случае успешного чтения выдает в синхронном режиме прочитанную строку байт|2|
И где тут про основной поток ?
Про основной поток стало известно только после допроса автора.
О ComEX, кроме описания точек, нет ничего нигде - ни в Wiki ни в примерах.
карма: 24
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 25681
Рейтинг: 2087
#6: 2015-10-27 02:22:26 ЛС | профиль | цитата
Tad писал(а):
И где тут про основной поток ?

Здесь нет, в ответе есть. Я дал довольно конкретный и развернутый ответ, предвидя именно вопрос про вывод в интерфейсные элементы. И после этого ответа меня снова спросили про то, на что я уже ответил, какова должна быть моя реакция?
Tad писал(а):
О ComEX, кроме описания точек, нет ничего нигде - ни в Wiki ни в примерах.

Это, в принципе, экспериментальный компонент. Я ждал, что его кто-то развернуто протестирует, но так и не дождался.
карма: 20

0
Ответов: 16884
Рейтинг: 1237
#7: 2015-10-27 08:18:45 ЛС | профиль | цитата
nesco писал(а):
Это, в принципе, экспериментальный компонент.
Удивил...
На SVN "в принципе, экспериментальный компонент"
nesco писал(а):
Я ждал, что его кто-то развернуто протестирует
И как можно "развернуто протестировать" при полном отсутствии описания?
Кстати, даже в старой буке 2006 года выпуска COM-портов уже нет (про новое оборудование даже не говорю.)
карма: 24
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 655
Рейтинг: 18
#8: 2015-10-27 09:55:48 ЛС | профиль | цитата
Я ждал, что его кто-то развернуто протестирует, но так и не дождался.


Я данный компонент часто использую, стабильный, проблем не возникало (несмотря на то что допускаю ошибки).
На базе данного компонента делал небольшие программы для отправки и получения СМС через 3G модемы, работал с UART, делал тестовые утилиты для купюроприемников.
Что требуется для развернутого тестирования?
карма: 0

0
файлы: 1code_36442.txt [125B] [308]
Разработчик
Ответов: 25681
Рейтинг: 2087
#9: 2015-10-27 09:56:31 ЛС | профиль | цитата
Tad писал(а):
Удивил...

Гы. Я не первый -- посмотри последнюю группу вкладки интерфейсы.
Tad писал(а):
И как можно "развернуто протестировать" при полном отсутствии описания?

Ну и что там описывать? Вот описал, сильно помогло?
Tad писал(а):
Кстати, даже в старой буке 2006 года выпуска COM-портов уже нет (про новое оборудование даже не говорю.)

На материнке может быть хитрый разъем, который никуда не подключен. И тем не менее это не мешает их применять кому не лень. Да и преобразователи СОМ-USB еще никто не отменял.
карма: 20

0
Ответов: 655
Рейтинг: 18
#10: 2015-10-27 10:00:16 ЛС | профиль | цитата
Кстати, даже в старой буке 2006 года выпуска COM-портов уже нет (про новое оборудование даже не говорю.)


Очень много оборудования еще использует COM порты или эмуляцию COM>USB,USB>COM...
Универсальный компонент для работы с устройствами USB я так понимаю в принципе тяжело реализовать, для каждого конкретного случая будет свой IC? Или же в Hiasm работа с USB практически не реализуема?
карма: 0

0
Разработчик
Ответов: 25681
Рейтинг: 2087
#11: 2015-10-27 10:05:19 ЛС | профиль | цитата
Gunnman писал(а):
несмотря на то что допускаю ошибки

Асинхронный выход может и работать с интерфейсными элементами, при условии, что хватит время между соседними onRead и перерисовками интерфейсного элемента, но делать так не корректно.
------------ Дoбавленo в 10.05:
Gunnman писал(а):
Или же в Hiasm работа с USB практически не реализуема?

Универсального компонента не сделать, тк как у разных драйверов разный API и
Gunnman писал(а):
для каждого конкретного случая будет свой IC

карма: 20

0
Ответов: 4347
Рейтинг: 678
#12: 2015-10-27 11:54:11 ЛС | профиль | цитата
nesco писал(а):
но делать так не корректно
Предполагаю, корректно делать так: Synchronize v1.0.7z
карма: 25

0
Разработчик
Ответов: 25681
Рейтинг: 2087
#13: 2015-10-27 12:09:52 ЛС | профиль | цитата
Netspirit писал(а):
Предполагаю, корректно делать так

Зачем в компоненте COMEX это делать, когда там предусмотрен метод onSyncRead, работающий по тому же принципу
карма: 20

0
Ответов: 4347
Рейтинг: 678
#14: 2015-10-27 12:16:18 ЛС | профиль | цитата
Возможно в COMEX это и не так необходимо, а вообще, такое нужно, когда основная обработка выполняется в параллельном потоке, а в основном потоке нужны только небольшие действия. Нормально такое сделать, например, в компоненте Thread (с аналогичным событием) - сложно.
карма: 25

0
Разработчик
Ответов: 25681
Рейтинг: 2087
#15: 2015-10-27 13:55:54 ЛС | профиль | цитата
Netspirit писал(а):
Нормально такое сделать, например, в компоненте Thread (с аналогичным событием) - сложно.

Если выдавать не по окончанию работы, а из любого места параллельного потока, то да, такое решение может пригодиться.
------------ Дoбавленo в 13.55:
Добавил компонент Synchronize на SVN. Netspirit, сделай в справке для него описание с примером
карма: 20

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)