|
Out of range проблема.
|
|||
---|---|---|---|
#18+
Я по таймеру запускаю опрос в цикле Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
в другом методе я получаю ответ и показываю его в списке Код: c# 1. 2. 3. 4. 5. 6. 7.
и тут я получаю OutOfRange Exeption - g_read_idx индекс принимает значение равное read_reg_list.Length (длина списка). я прнимаю что методы не синхронизированы - но как, как индекс может выйти из границ? кроме условия for (g_read_idx = 0; g_read_idx < read_reg_list.Length; g_read_idx++) индекс не модифицируется ни в каком другом месте. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 10:32 |
|
Out of range проблема.
|
|||
---|---|---|---|
#18+
read_reg_list[] и listViewRead.Items[] это разные массивы, они не обязаны быть одного размера. Посмотри размер обоих в отладчике. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 10:39 |
|
Out of range проблема.
|
|||
---|---|---|---|
#18+
jenya7 g_read_idx индекс принимает значение равное read_reg_list.Length (длина списка). Код - жесть вообще ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 10:40 |
|
Out of range проблема.
|
|||
---|---|---|---|
#18+
Dima T read_reg_list[] и listViewRead.Items[] это разные массивы, они не обязаны быть одного размера. Посмотри размер обоих в отладчике. я заполняю лист массивом Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 10:42 |
|
Out of range проблема.
|
|||
---|---|---|---|
#18+
Shocker.Pro jenya7 g_read_idx индекс принимает значение равное read_reg_list.Length (длина списка). Код - жесть вообще добавил проверку Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
но из за того что цикл не синхронизирован с ответом g_read_idx всегда равен read_reg_list.Length. попробовал синхронизировать так Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
но что то не работает. как лучше сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 10:55 |
|
Out of range проблема.
|
|||
---|---|---|---|
#18+
jenya7 как лучше сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 11:33 |
|
Out of range проблема.
|
|||
---|---|---|---|
#18+
Shocker.Pro jenya7 как лучше сделать? мне надо синхронизировать посылку и прием. посылка Код: c# 1.
прием в другом потоке - вызывается этот метод Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
одиночная посылка-прием работают без проблем уже год как. теперь нужно сделать это в цикле Код: c# 1. 2. 3. 4. 5. 6. 7.
и тут все ломается так как цикл посылает весь массив не дожидаясь ответа. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 11:54 |
|
Out of range проблема.
|
|||
---|---|---|---|
#18+
jenya7 мне надо синхронизировать посылку и прием. Посылку чего? Прием чего? Это в пределах приложения или это разные приложения? Почему используется именно такой способ, а не штатные средства синхронизации? Почему разделяется поле между потоками без какого либо использования безопасности потоков? Этот код - бред, а чтобы посоветовать что-то конкретное - надо знать задачу, а ты ее не описываешь. Опиши задачу БЕЗ ПРИМЕРОВ КОДА. Полностью словами. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 12:21 |
|
Out of range проблема.
|
|||
---|---|---|---|
#18+
Shocker.Pro jenya7 мне надо синхронизировать посылку и прием. Посылку чего? Прием чего? Это в пределах приложения или это разные приложения? Почему используется именно такой способ, а не штатные средства синхронизации? Почему разделяется поле между потоками без какого либо использования безопасности потоков? Этот код - бред, а чтобы посоветовать что-то конкретное - надо знать задачу, а ты ее не описываешь. Опиши задачу БЕЗ ПРИМЕРОВ КОДА. Полностью словами. я не понимаю что тут может быть непонятно. даже я все уже понял. посылаем 6 байт по UDP. прибор возвращает ответ. поток принимающий ответ запущен. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
пришел ответ - вызвался updateRegReadValue - показал данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 12:47 |
|
Out of range проблема.
|
|||
---|---|---|---|
#18+
jenya7 посылаем 6 байт по UDP. прибор возвращает ответ. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 13:04 |
|
Out of range проблема.
|
|||
---|---|---|---|
#18+
Если ты хочешь отправлять следующий запрос только поле того, как пришел ответ на предыдущий, тебе нужно именно это и написать, а не какие-то странные слипы втыкать методом тыка. Но сначала придется изучить темы многопоточности, асинхронности, безопасности потоков. Написанный код нужно выкинуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 13:08 |
|
Out of range проблема.
|
|||
---|---|---|---|
#18+
Shocker.Pro Если ты хочешь отправлять следующий запрос только поле того, как пришел ответ на предыдущий, тебе нужно именно это и написать, а не какие-то странные слипы втыкать методом тыка. Но сначала придется изучить темы многопоточности, асинхронности, безопасности потоков. Написанный код нужно выкинуть. это простая утилита для проверки. считать регистры с прибора и вся музыка. я не хочу сейчас писать новый проект. как в цикле подождать ответ? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 13:49 |
|
Out of range проблема.
|
|||
---|---|---|---|
#18+
Тебе не нужно в цикле ЖДАТЬ ответ. Тебе нужно. чтобы факт прихода ответа инициировал отправку следующего запроса. Очередь нужно организовать. Очередь опустела, процесс закончился. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 14:03 |
|
Out of range проблема.
|
|||
---|---|---|---|
#18+
Shocker.Pro Тебе не нужно в цикле ЖДАТЬ ответ. Тебе нужно. чтобы факт прихода ответа инициировал отправку следующего запроса. Очередь нужно организовать. Очередь опустела, процесс закончился. а как? можно пример? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 14:22 |
|
Out of range проблема.
|
|||
---|---|---|---|
#18+
Пример чего? Как использовать Queue или ConcurrentQueue? Примеры в документации. jenya7 я не понимаю что тут может быть непонятно. даже я все уже понял. jenya7 пришел ответ - вызвался updateRegReadValue - показал данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 16:09 |
|
Out of range проблема.
|
|||
---|---|---|---|
#18+
Возможно тебе поможет pipeline-паттерн . ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 16:29 |
|
Out of range проблема.
|
|||
---|---|---|---|
#18+
Shocker.Pro Пример чего? Как использовать Queue или ConcurrentQueue? Примеры в документации. jenya7 я не понимаю что тут может быть непонятно. даже я все уже понял. jenya7 пришел ответ - вызвался updateRegReadValue - показал данные. спасибо. с очередью хорошо работает. но остается проблема - когда делаю int num = numbers.Dequeue(); - вопрос по какому индексу положить - listViewRead.Items[???].SubItems[1].Text = num .ToString("X"); - индексы уже убежали. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 16:32 |
|
Out of range проблема.
|
|||
---|---|---|---|
#18+
Можно в очередь класть не текст для отправки, а объект, содержащий как текст, так и нужный индекс. Индекс можно запоминать в момент отправки и потом использовать после получения. Но такой сценарий будет работать только в синхронной схеме, то есть когда есть только одна отправка и одно получение ответа и они не могут быть параллельны. Как я понимаю, у тебя именно так. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 16:41 |
|
Out of range проблема.
|
|||
---|---|---|---|
#18+
vb_sub Возможно тебе поможет pipeline-паттерн . очередь тоже прекрасно работает. даже если я все сделаю по книге - отдельные потоки, асинхронность - мы упираемся в ту же проблему - синхронизировать принятые пакеты с индексами в ГУИ (списке). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 16:44 |
|
Out of range проблема.
|
|||
---|---|---|---|
#18+
Shocker.Pro Можно в очередь класть не текст для отправки, а объект, содержащий как текст, так и нужный индекс. Индекс можно запоминать в момент отправки и потом использовать после получения. Но такой сценарий будет работать только в синхронной схеме, то есть когда есть только одна отправка и одно получение ответа и они не могут быть параллельны. Как я понимаю, у тебя именно так. прибор о наших индексах ничего не знает. я не могу добавлять отсебятину в протокол прибора. да у меня так - пакет отправил - получил ответ. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 16:47 |
|
Out of range проблема.
|
|||
---|---|---|---|
#18+
блин...я конечно идиот. я возвращаю опкод и значение в регистре. а мог бы возвращать и адрес регистра. тогда бы знал по какому индексу прописать значение. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 17:00 |
|
Out of range проблема.
|
|||
---|---|---|---|
#18+
jenya7 прибор о наших индексах ничего не знает. я не могу добавлять отсебятину в протокол прибора. да у меня так - пакет отправил - получил ответ. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 17:12 |
|
Out of range проблема.
|
|||
---|---|---|---|
#18+
Shocker.Pro jenya7 прибор о наших индексах ничего не знает. я не могу добавлять отсебятину в протокол прибора. да у меня так - пакет отправил - получил ответ. а как сохранить в промежутке? если только сделать какой то лист, добавлять элемент с индексом, и засовывать в пустой элемент пришедшее значение. но если по какой либо причине будет пропуск в посылке или приеме - все сломается. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 17:42 |
|
Out of range проблема.
|
|||
---|---|---|---|
#18+
jenya7 а как сохранить в промежутке? если только сделать какой то лист, добавлять элемент с индексом, и засовывать в пустой элемент пришедшее значение. но если по какой либо причине будет пропуск в посылке или приеме - все сломается. Но твой способ лучше конечно, я же не знал, какие у тебя там возможности обмена ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2020, 17:48 |
|
|
start [/forum/topic.php?fid=20&fpage=13&tid=1398650]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
101ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 279ms |
total: | 489ms |
0 / 0 |