LINUX.ORG.RU

Длительная работа с большим объемом данных на C++

 ,


0

2

Возникла необходимость написать простую программу, которая будет считывать данные по rs-232 и записывать их в файл. Пишу я ее на C++ с использованием QtSerialPort. Собственно, с написанием работающей программы проблем нет, но есть сомнения в ее надежности.

Дело в том, что программа должна работать непрерывно, в течении 2-х часов. За это время она непрерывно получает 12-байтные пакеты из порта, преобразовывает их и пишет в файл. В выходном текстовом файле за все время работы накопится порядка 36кк строк. Программа будет запускаться на компьютере с 2Гб ОЗУ и файловой системой ext3.

Хотелось бы знать не зависнет ли программа, когда накопится много данных? Не будет ли она тормозить и терять из-за этого данные (пакеты из порта идут непрерывным потоком)?

У меня нет возможности протестировать все заранее.

Ответ на: комментарий от panter_dsd

Программа может хоть месяц читать из порта и писать в файл

Когда файл вырастет до 400-500 Мб, запись в него не будет тормозить?

erterred
() автор топика

Хотелось бы знать не зависнет ли программа, когда накопится много данных?

не зависнет, если течь не будет.

У меня нет возможности протестировать все заранее.

сделайте эмуляцию: вместо rs-232 читайте файл. Да хоть /dev/urandom например.

emulek
()
Ответ на: комментарий от erterred

Когда файл вырастет до 400-500 Мб, запись в него не будет тормозить?

нет. Если использовать O_APPEND, то можно хоть 100Гб и больше.

emulek
()
Ответ на: комментарий от erterred

А можно конкретики?

ну если вы делаете mmap(2), то конечно будет уныло. В 32х битной системе так вообще больше 2Г не замапить. Ну а с вашими 2Г так вообще.

PS: Read The Fucкing Manuals

man 2 open

man 2 write

man 3 fopen

man 3 fwrite

man 2 mmap (вам этого не нужно, но почитайте для общего развития)

emulek
()
Последнее исправление: emulek (всего исправлений: 2)

У меня нет возможности протестировать все заранее.

что программа должна работать непрерывно, в течении 2-х часов

Вранье.

pathfinder ★★★★
()
Ответ на: комментарий от int13h

Я не программист, использую то с чем знаком. Работать с rs-232 я умею при помощи Qt, вот и выбрал связку C++ и Qt.

erterred
() автор топика
Ответ на: комментарий от erterred

Я не программист, использую то с чем знаком. Работать с rs-232 я умею при помощи Qt, вот и выбрал связку C++ и Qt.

Qt это всего лишь обёртка, что-бы уметь работать с обёрткой, нужно понимать содержимое.

emulek
()
Ответ на: комментарий от emulek

что-бы уметь работать с обёрткой, нужно понимать содержимое.

вот это сейчас мощно было

zolden ★★★★★
()
Ответ на: комментарий от int13h

для чтения из /dev/ttyS0, обработки и записи в файл не нужно ничего особого громоздить

ну видишь — ТС осилил только qtшные обёртки. Хотя конечно достаточно лишь fread(3) для этого.

emulek
()

На первый взгляд - никакого зависания быть не должно. Если начнутся траблы, то они будут сугубо индивидуальны. Думаю, никто даже из опытных прогеров не скажет тебе, где «стелить соломку».

Stalin ★★★★★
()
Ответ на: комментарий от int13h

Где тут микроскоп и где гвозди? Всё используетс по назначению. Qt давно перестал быть фреймворком для гуйни.

invy ★★★★★
()

Проблем в общем-то начаться не должно.

Но как варианты оптимизаций (ради оптимизаций): разбивать файл на куски, всё это дело сразу же архивировать gzip'ом, например. Для экономии места на диске.

invy ★★★★★
()
Ответ на: комментарий от invy

Qt давно перестал быть фреймворком для гуйни

Вот и я говорю - микроскопом по гвоздям =)

int13h ★★★★★
()
Ответ на: комментарий от emulek

Надо заметить, что мы не знаем, что именно пишет топикстартер. Возможно чтение из ком порта - это только малая часть.

invy ★★★★★
()
Ответ на: комментарий от invy

Возникла необходимость написать простую программу, которая будет считывать данные по rs-232 и записывать их в файл.

считывать данные по rs-232 и записывать их в файл

считывать, записывать

int13h ★★★★★
()

Слишком теоретизированные вопросы. Все зависит от логики твоей программы, которую мы не видим.
Можешь протестировать, эмулируя работу com-порта программно, например как советуют тут.

Shadow1251
()

с использованием QtSerialPort

учти, что QSerialPort, как бы это помягче, глюковат и не всегда работает правильно, особенно с виртуальными драйверами

shty ★★★★★
()
Последнее исправление: shty (всего исправлений: 1)
Ответ на: комментарий от panter_dsd

Ахах... Программа годами может это делать... не только лишь месяц :)

slackwarrior ★★★★★
()
Ответ на: комментарий от RiseOfDeath

выше уже говорили:

Надо заметить, что мы не знаем, что именно пишет топикстартер. Возможно чтение из ком порта - это только малая часть.

emulek
()
Ответ на: комментарий от shty

учти, что QSerialPort, как бы это помягче, глюковат и не всегда работает правильно, особенно с виртуальными драйверами

Неужели? А баг-трекер начто? П###ть знаете-ли не мешки ворочать. (С)

А может так:

учти, что shty, как бы это помягче, глюковат и не работает правильно, особенно с QSerialPort ? :)

kuzulis ★★
()
Последнее исправление: kuzulis (всего исправлений: 1)
Ответ на: комментарий от kuzulis

<Qt-фанбои набежали, все на велосипед>

Неужели? А баг-трекер нечто?

простите, лично Вы какой опыт работы с железками вообще и с последовательными портами в частности имеете?

shty ★★★★★
()
Ответ на: комментарий от alex_custov

1) я правильно понимаю, что я таки могу посмотреть в глаза профиль человеку, отвественному за race condition (по всей видимости) в QSerialPort? :)

2) таки все же было бы интересно узнать про опыт работы с железками и выполнения проектов

shty ★★★★★
()
Ответ на: комментарий от shty

1) я правильно понимаю, что я таки могу посмотреть в глаза профиль человеку, отвественному за race condition (по всей видимости) в QSerialPort? :)

Нет бага в трекере/форуме - нет и проблемы. Какой нафиг race condition в классе, который reentrant и не поддерживает многопоточие?

2) таки все же было бы интересно узнать про опыт работы с железками и выполнения проектов

10 лет, устроит?

kuzulis ★★
()
Ответ на: комментарий от kuzulis

Нет бага в трекере/форуме - нет и проблемы.

кому как

Какой нафиг race condition в классе, который reentrant и не поддерживает многопоточие?

1) reentrancy в данном случае не играет роли
2) эээ, простите, а event loop в случае асинхронной работы как организован?

2) таки все же было бы интересно узнать про опыт работы с железками и выполнения проектов

10 лет, устроит?

надеюсь в таком разе мне не надо объяснять, что если есть две одинаковые тестовые программы, одна из которых использует native api, а вторая QSerialPort и первая работает нормально, а вторая жует и слепляет данные, то наверное во второй программе что-то не так?

shty ★★★★★
()
Последнее исправление: shty (всего исправлений: 1)

Кстати а что лучше для подобных целей QtSerialPort или Boost::asio, при учловии что гуй не нужен?

CunMun
()
Ответ на: комментарий от shty

2) эээ, простите, а event loop в случае асинхронной работы как организован?

Сорцы открыты - берем и читаем.

надеюсь в таком разе мне не надо объяснять, что если есть две одинаковые тестовые программы, одна из которых использует native api, а вторая QSerialPort и первая работает нормально, а вторая жует и слепляет данные, то наверное во второй программе что-то не так?

Нет. Это означает что с кодером что-то не так, раз он не осилил такую банальщину.

kuzulis ★★
()
Ответ на: комментарий от CunMun

Кстати а что лучше для подобных целей QtSerialPort или Boost::asio, при учловии что гуй не нужен?

Буст поменьше ресурсов ЦПУ жрет. Когда то делал сравнение. Пока не понятно почему такие результаты (хотя некоторые мысли есть на этот счет). Нужно как-нить сесть и заняться этим вплотную.

Отсюда выводы делайте сами. ;)

kuzulis ★★
()
Последнее исправление: kuzulis (всего исправлений: 2)
Ответ на: комментарий от kuzulis

2) эээ, простите, а event loop в случае асинхронной работы как организован?

Сорцы открыты - берем и читаем.

ну то есть ты весь такой опытнай, и не знаешь что там у тебя под капотом треды через которые асинхронные события вылетают, ок

shty ★★★★★
()
Ответ на: комментарий от kuzulis

Это означает что с кодером что-то не так, раз он не осилил такую банальщину.

у меня то как раз все работает как надо, а вот QSerialPort что-то не очень

PS жаль что ты решил банально похамить, вместо того чтобы таки осилить послушать, впрочем для некоторых людей это характерно

shty ★★★★★
()
Последнее исправление: shty (всего исправлений: 1)
Ответ на: комментарий от shty

ну то есть ты весь такой опытнай, и не знаешь что там у тебя под капотом треды через которые асинхронные события вылетают, ок

Там нет тредов (платформу WinCE не берем в расчет).

S жаль что ты решил банально похамить, вместо того чтобы таки осилить послушать, впрочем для некоторых людей это характерно

Я не желаю слушать ниочем. Есть претензии - вперед на баг-трекер с примером чтобы воспроизвести проблему. Нет примера - не о чем разговаривать. Все очень просто.

kuzulis ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.