правильная ли реализация, консольная утилита по обработке сетевого файла |
Здравствуйте, гость ( Вход | Регистрация )
правильная ли реализация, консольная утилита по обработке сетевого файла |
rich |
6.8.2015, 23:31
Сообщение
#1
|
Участник Группа: Участник Сообщений: 123 Регистрация: 1.3.2008 Пользователь №: 109 Спасибо сказали: 6 раз(а) Репутация: 0 |
Задача:
Написать консольную утилиту которая получает файл по сети, обрабатывает его неким образом и завершается. Реализация: main.cpp: Раскрывающийся текст
check.cpp: Раскрывающийся текст
нашёл где-то filedownloader.cpp: Раскрывающийся текст
Так работает. Не знаю что, но что-то мне не нравится. А вам? |
|
|
lanz |
7.8.2015, 13:05
Сообщение
#2
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Из некритичного/отсутствующего.
1.
cck не удаляется. Можно объявить локальной переменной(не указателем). 2. fd не удаляется (или не видно где удаляется) 3. "URL_TO_FILE" hardcoded. Вообще мне все нравится, но я бы делал скачку файла отдельно, например через curl, а прога обрабатывала уже скачаный файл через pipe или еще как. |
|
|
rich |
7.8.2015, 23:14
Сообщение
#3
|
Участник Группа: Участник Сообщений: 123 Регистрация: 1.3.2008 Пользователь №: 109 Спасибо сказали: 6 раз(а) Репутация: 0 |
Из некритичного/отсутствующего. 1.
cck не удаляется. Можно объявить локальной переменной(не указателем). 2. fd не удаляется (или не видно где удаляется) 3. "URL_TO_FILE" hardcoded. Вообще мне все нравится, но я бы делал скачку файла отдельно, например через curl, а прога обрабатывала уже скачаный файл через pipe или еще как. Как правильно или где правильно удалять fd? Если удаляю в слоте, по завершению обработки, valgrind выдаёт следующее: Раскрывающийся текст Цитата ==25339== HEAP SUMMARY: ==25339== in use at exit: 104,418 bytes in 953 blocks ==25339== total heap usage: 42,329 allocs, 41,376 frees, 4,076,005 bytes allocated ==25339== ==25339== LEAK SUMMARY: ==25339== definitely lost: 3,682 bytes in 24 blocks ==25339== indirectly lost: 75,566 bytes in 310 blocks ==25339== possibly lost: 0 bytes in 0 blocks ==25339== still reachable: 25,170 bytes in 619 blocks ==25339== suppressed: 0 bytes in 0 blocks ==25339== Rerun with --leak-check=full to see details of leaked memory ==25339== ==25339== For counts of detected and suppressed errors, rerun with: -v ==25339== ERROR SUMMARY: 9 errors from 7 contexts (suppressed: 1 from 1) При этом иногда программа завершается так: Раскрывающийся текст
а в gdb на 15й раз завершилась так: Раскрывающийся текст
Можно, конечно, скрестить ужа с ежом (bash с QT). Наверно, например, так: .и убрать вовсе класс FileDownloader, но хочеться только средствами QT :) Сообщение отредактировал rich - 7.8.2015, 23:15 |
|
|
lanz |
8.8.2015, 11:46
Сообщение
#4
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Цитата Как правильно или где правильно удалять fd? Используйте deleteLater. С обычным delete объект удаляется, а потом управление возвращается в fileDownloaded уже удаленного объекта. Цитата Можно, конечно, скрестить ужа с ежом (bash с QT). Не вижу в этом ничего предосудительного Цитата но хочеться только средствами QT Но зачем? |
|
|
rich |
8.8.2015, 13:09
Сообщение
#5
|
Участник Группа: Участник Сообщений: 123 Регистрация: 1.3.2008 Пользователь №: 109 Спасибо сказали: 6 раз(а) Репутация: 0 |
|
|
|
Iron Bug |
10.8.2015, 9:24
Сообщение
#6
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
|
|
|
lanz |
10.8.2015, 10:51
Сообщение
#7
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Цитата а так, баш есть далеко не на всех системах. А кто говорит про баш? http://curl.haxx.se/download.html |
|
|
rich |
10.8.2015, 11:06
Сообщение
#8
|
|
Участник Группа: Участник Сообщений: 123 Регистрация: 1.3.2008 Пользователь №: 109 Спасибо сказали: 6 раз(а) Репутация: 0 |
Цитата Можно, конечно, скрестить ужа с ежом (bash с QT). Не вижу в этом ничего предосудительного Цитата но хочеться только средствами QT Но зачем? если кроссплатформа не нужна, то, возможно, и незачем. а так, баш есть далеко не на всех системах. Как, у вас ещё нет баша? |
|
|
||
Iron Bug |
11.8.2015, 9:35
Сообщение
#9
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
Как, у вас ещё нет баша? юзеры выбирают то, что им удобнее и привычнее. они ради твоей поделки точно не будут ставить какой-нить cygwin или unix utils. они просто не станут пользоваться поделкой. кроссплатформенность означает не только код, но и нативность в рамках той оси, на которой работает программа. использование родных интерфейсов и стандартных утилит. |
|
|
Текстовая версия | Сейчас: 4.12.2024, 22:38 |