|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
26.07.2012, 10:54 | #1 |
Пользователь
Регистрация: 05.01.2012
Сообщений: 27
|
Сохранение данных COM-порта в несколько файлов
Добрый день всем!
Возник вот какой вопрос: У меня есть входной поток с СОМ-порта. Данные записываются в файл. Но так как считывание происходит непрерывно, в течение длительного времени (до нескольких дней), то приемный файл сильно "разбухает". Все, что встречал в нете, связано с сохранением в один и тот же файл. А кому-нибудь приходилось сохранять данные в различные файлы? P.S.: Мне подобную циклическую запись удалось реализовать только для синхронного режима чтения СОМ-порта (по достижении заданного объема текущий файл закрывался и запись начинала вестись в новый файл). Но это тупиковый путь, т.к. "поедается" много системных ресурсов и программа работает нестабильно. Может кто-то делал подобное для асинхронного режима? |
26.07.2012, 12:42 | #2 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
...решается очень просто формированием имени файла из даты-года текущего, к примеру 10-08-2012.txt, 11-08-2012.txt, ... . К тому же, так удобнее просматривать потом логи.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
26.07.2012, 13:30 | #3 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,330
|
В чем проблема с асинхронным чтением? Все равно данные приходят сначала к вам, потом идут в файл, не зависимо синхронно или нет. Что мешает проверить не нужно ли менять файл?
А с чего вы взяли, что при синхронном режиме поедаются много ресурсов? Ничего подобного. |
30.07.2012, 23:18 | #4 |
Пользователь
Регистрация: 05.01.2012
Сообщений: 27
|
to waleri
Проблема в том, что наиболее часто асинхронный режим чтения рекомендуют организовывать при помощи потоков, как, например, здесь: http://www.piclist.ru/S-COM-THREAD-R...HREAD-RUS.html Я открываю порт Код:
Код:
Код:
Код:
Но только для одного файла! А организовать цикл не получается |
30.07.2012, 23:20 | #5 |
Пользователь
Регистрация: 05.01.2012
Сообщений: 27
|
Для синхронного режима с этим проблем нет:
Код:
"Кушает" много ресурсов и часто зависает |
31.07.2012, 10:47 | #6 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,330
|
Не вижу, где синхронный код кушает ресурсы. Зависает - это да. Точнее не зависает а просто ждет 4К данных. Посмотрите на SetCommTimeouts(). И потом, почему в асинхронном варианте вы ожидаете информации о событии а в синхронном варианте нет? Что мешает узнать точное число байт в очереди и считать только их - тогда ничего зависать не будет.
Почему вы решили что асинхронный вариант можно только для одного файла? Что вам мешает а) запустить несколько потоков или б) воспользоваться услугами WaitForMultipleObjects()? |
12.08.2012, 00:18 | #7 |
Пользователь
Регистрация: 05.01.2012
Сообщений: 27
|
В асинхронном режиме не могу организовать запись в несколько файлов, потому что за входящий поток отвечает функция
Код:
Код:
А как работать с двумя - ума не приложу. Где ограничить объем файла и как проводить отсечку потока, если условие цикла : Код:
|
12.08.2012, 00:26 | #8 |
Пользователь
Регистрация: 05.01.2012
Сообщений: 27
|
Распараллелить входной поток (он один единственный) на несколько я не могу, потому что в нем каждый байт что-то значит. При чем важно не только за каким и перед каким байтом он идет, но и какой он по счету.
А на счет очереди вопрос - поток непрерывный (с постоянной скоростью). Получается, число байт в очереди будет постоянно обновляться (накапливаться). Разве я смогу узнавать, сколько их там в какой момент времени? |
12.08.2012, 05:18 | #9 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,330
|
А зачем вам цикл в ReadPrinting() вообще?
Все гораздо проще (на псевдокоде): Код:
|
12.08.2012, 21:23 | #10 |
Пользователь
Регистрация: 05.01.2012
Сообщений: 27
|
Спасибо, попробую
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
расшифровка данных, принятых с COM-порта | IIUH | Общие вопросы Delphi | 25 | 12.04.2021 14:05 |
отправка/принятие данных с порта. | romank26 | Win Api | 1 | 26.03.2012 12:51 |
Считка данных по-битно из COM порта | Terran | Общие вопросы Delphi | 3 | 23.11.2011 04:19 |
Чтение данных с COM порта 232 | Dimitr_88 | Общие вопросы C/C++ | 10 | 03.09.2010 10:39 |
Приём данных с com порта | kyc0k | Помощь студентам | 3 | 28.03.2008 15:04 |