LINUX.ORG.RU

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

 ,


0

2

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

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

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

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

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

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

1) это заявление безграмотно с технической точки зрения, ибо, еще раз повторяю, для организации event loop'а, который будет перехватывать системные сообщения в асинхронном режиме ты без потоков не обойдешься
2) если бы ты хоть раз сам написал ручками асинхронный драйвер для последовательного порта этот вопрос бы для тебя не стоял бы, собственно на этом вопрос с твоей квалификацией можно считать закрытым
3) чтобы не быть голословным смотрим QSerialPort: qserialport_win.cpp, qserialport_unix.cpp. Видим там QWinEventNotifier и QSocketNotifier. Смотрим дальше на код нотификаторов и добираемся до диспетчеров событий. Смотрим на код диспетчеров qeventdispatcher_win.cpp и qeventdispatcher_unix.cpp. И смотри теперь как у тебя не используются треды.

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

Я не желаю слушать ничем.

ну и чего ты тогда сюда приперся? я тебя не звал

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

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

посмотреть можно на эти программы?

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

посмотреть можно на эти программы?

в принципе можно, но много копипастить придется (особенно в первой части)

shty ★★★★★
()

в ее надежности.

возьми эрланг. запусти socat через open_port и преобразовый чего там тебе надо, а потом пиши в файл. прикрути супервайзер для надёжности. работы на четыре с половинуй минуты.

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

и хорошо, что не слышал )

PS если Вам сильно персонально интересно могу спецом для Вас завести открытую репу и налить туда код

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

если Вам сильно персонально интересно

мне не интересно. Не интересно говорить с такими как ты, которые что-то там могут когда-нить залить/скопипастить куда-то.

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

1) это заявление безграмотно с технической точки зрения, ибо, еще раз повторяю, для организации event loop'а, который будет перехватывать системные сообщения в асинхронном режиме ты без потоков не обойдешься

Итить-колотить, а причем тут потроха qt-ного евент-лупа?

Открою тайну: там крутится один «главный поток».. О каких потоках еще речь?

2) если бы ты хоть раз сам написал ручками асинхронный драйвер для последовательного порта этот вопрос бы для тебя не стоял бы, собственно на этом вопрос с твоей квалификацией можно считать закрытым

Гы, LOL.

3) чтобы не быть голословным смотрим QSerialPort: qserialport_win.cpp, qserialport_unix.cpp. Видим там QWinEventNotifier и QSocketNotifier. Смотрим дальше на код нотификаторов и добираемся до диспетчеров событий. Смотрим на код диспетчеров qeventdispatcher_win.cpp и qeventdispatcher_unix.cpp. И смотри теперь как у тебя не используются треды.

Ай, молодца! Неуж-то все-таки заглянул в сорцы?

И смотри теперь как у тебя не используются треды.

Вот поверь, *треды* - не используются.

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

Не интересно говорить с такими как ты,

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

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

Итить-колотить, а причем тут потроха qt-ного ивент-лупа?

про qt'шный event loop - это ты сам сейчас придумал, если ты больше никаких event loop'ов не видел - это твои проблемы

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

Вот поверь, *треды* - не используются.

ты все же посмотри в файлики на которые я ссылки дал

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

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

Будь мужиком блеяд! Обязан прочитать мысли юзера гвнецо!

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

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

poll/select это для лохов?

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

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

class SocketAsyncHandler : public QThread - да ты упоротый что-ли? А это что?

qeventdispatcher_win.cpp

#if defined(Q_OS_WINCE)
QT_BEGIN_INCLUDE_NAMESPACE
#include <winsock.h>
QT_END_INCLUDE_NAMESPACE
// Asynchronous Winsocks ------------------------------------------
#ifndef QT_NO_THREAD
QT_BEGIN_INCLUDE_NAMESPACE
#include <qthread.h>
#include <qmap.h>
#include <qmutex.h>
QT_END_INCLUDE_NAMESPACE
//#define QCE_ASYNC_DEBUG

namespace {
class SocketAsyncHandler;
class SocketAsyncHandler : public QThread
{
....

#endif // Q_OS_WINCE

идёте к успеху сударь =)

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

Да, и оно вызвается длительным контактом с эрланговским кодом.

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

class SocketAsyncHandler : public QThread - да ты упоротый что-ли? А это что?

По-моему упорот здесь совсем не Я. Вообще-то что там Q_OS_WINCE (как уже показали выше). Так, что - иди ка ты лесом. Да и это никоим образом не откосится к QtSeriaPort - так что беги-ка ты дружок читай мурзилку.

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

Иди-ка ты сам лесом, изобретатель велосипедов. А я да, я не прав был.

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