|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
02.02.2014, 01:18 | #1 |
Пользователь
Регистрация: 13.01.2014
Сообщений: 45
|
Таймер?
Попробуем по другому.
Что нужно: Есть метод к котором выполняется считывание с com порта. Иногда данные долго не возвращаются или не успеваю вовремя послать подтверждение. Соответственно программа ждет данные, а рация их не посылает. Нужно сделать чтоб если скажем в течении 30 секунд ничего не происходило, то вызывался другой метод или выполнялась определенная команда. Как сделать лучше. Если можно с примеров. Вот это прочел, но не понял. |
02.02.2014, 01:53 | #2 |
Пользователь
Регистрация: 04.01.2011
Сообщений: 66
|
Толь я упоротый, то ли твое сообщение отображается частями, но я его не осилил.
Код:
Код:
Код:
------------------------- Ты пытаешься считать данные с com порта, но порой они не приходят? Так собсна, у порта есть таймаут, и нужно знать как ты именно читаешь?? Имеется синхронное и асинхронное чтение с порта. Имеются разные способы. Насколько я понял твой метод, работает с ком-портом, но периодически ты не понимаешь что делать с ветвлением алгоритма, если данные не пришли? Последний раз редактировалось alexusankov; 02.02.2014 в 02:00. |
02.02.2014, 01:59 | #3 |
Старожил
Регистрация: 03.01.2014
Сообщений: 2,870
|
Можно попробовать реализовать тайм аут. Общий принцип такой.
Задаёте в таймере интервал, допустим 500 мс (значение исключительно для примера). В обработчике помимо метода прослушивающего порт, делаете подсчёт времени. Каждый тик таймера, т.е в данном случае каждые 500 мс, слушаете порт и увеличиваете счётчик времени. Если данные пришли, до истечения тайм аута (30 с), то делаете одно. Если в течении тайм аута ничего не произошло делаете другое. Приблизительно как-то так... |
02.02.2014, 02:03 | #4 |
Пользователь
Регистрация: 04.01.2011
Сообщений: 66
|
Пардон, зачем реализовывать то, что уже имеется?
Если событие чтения синхронное, то дальнейший код попросту сработает после таймаута. Вопрос в том - что автор там написал? P.s.s хотя я пересмотрел его предыдущую тему, и вроде понял. Щас подумаю. Последний раз редактировалось alexusankov; 02.02.2014 в 02:05. |
02.02.2014, 02:17 | #5 |
Пользователь
Регистрация: 13.01.2014
Сообщений: 45
|
alexusankov
Я пытаюсь сделать программу, которая считывает с рации по com порту GPS данные, и потом обрабатывает. Данные читать я кое как научился. Но заметил проблему, что если рации не послать "ack" после 3 раз, то рация ждет новой команды. Так как протокола у меня нет, и всё вычитываю через порт сканер, то иногда приходят данные которых у меня нет как образца, и соответственно моя программа никак не реагирует. Получается ситуация что рация послала 3 раза и ждет новой команды, а моя программа получила данные, но не знает что с ними делать, и ждет новых данных. Для этого и хотелось бы, если скажем в течении 30 секунд ничего не приходит, то посылается команда. Или например заметил что иногда не закрывается порт. То есть данные все отослал для завершения соединения, меняю значение в bool переменной, после этого должен порт закрыться, но не вижу закрытия, и программа висит. |
02.02.2014, 02:25 | #6 |
Старожил
Регистрация: 03.01.2014
Сообщений: 2,870
|
ИМХО в этом случае необходимо самому в программе слушать порт и контролировать его состояние. Аппаратные порты - не управляемые ресурсы. Их необходимо обязательно освобождать.
Проверьте работу алгоритма закрытия порта по точкам останова. Закрытие порта происходит во всех ветках, которые его используют? Защищайте алгоритмы работы с неуправляемыми ресурсами с помощью try... finally. На всякий случай в помощь: Работа с COM-портами в .NET (C#) |
02.02.2014, 02:40 | #7 |
Пользователь
Регистрация: 04.01.2011
Сообщений: 66
|
Пардон, но под рукой нет ПК с студией, а с таблетки писать несподручно, и я слегка пьян. Судя по первым требованиям, в чем заключается трудность я так и не понял.
Если вам необходимо пробовать получить известные данные с компорта в течении 30 сек, и далее в зависимости от результата выполнить код, то банальный топорный пример с костылями : (пардоньте, я пьян и за планшетом) Код:
Последний раз редактировалось alexusankov; 02.02.2014 в 02:43. |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Таймер | Руслан(2) | Общие вопросы C/C++ | 0 | 05.06.2012 16:54 |
Таймер | Рулан | Общие вопросы C/C++ | 0 | 02.06.2012 13:49 |
QT: Таймер | Krasi | Помощь студентам | 5 | 12.11.2011 08:15 |
таймер в C# | Munky | Помощь студентам | 2 | 15.04.2010 20:30 |
Таймер | Sergeo_89 | Общие вопросы Delphi | 11 | 24.01.2010 16:38 |