Дан файл случайного размера, наполненный беззнаковыми, 32-бит числами (uint32_t
).
Нужно | |
---|---|
1. Написать программу для его сортировки | ✓ |
2. Сделать обработку всевозможных ошибок | ✓ |
3. Добавить GUI с помощью Qt5 | ✓ |
4. Уведомлять о прогрессе сортировки (индикатор выполнения) | ✓ |
5. Максимально распараллелить выполнение программы | ✓ |
6. Собирать проект с помощью CMake | ✓ |
7. Выложить проект на github | ✓ |
На данный момент заведено 5 веток:
Имя ветки | Предназначение |
---|---|
aux | Вспомогательная ветка, содержит полезные скрипты |
dev_base | Ветка, в которой велась разработка ядра программы |
dev_qt | Ветка, в которой ведется разработка GUI и связывание его с ядром программы |
release | Ветка, в которой находятся исходные файлы готовой к использованию версии программы |
master | Титульная страница |
Текущее содержание dev_qt
uint32-sort/
├── build.sh
├── include
│ ├── file_manager.hpp
│ ├── lib_controller.hpp
│ └── sort_container.hpp
├── resources
│ ├── main.qml
│ └── qml.qrc
└── src
├── CMakeLists.txt
├── lib_controller.cpp
├── main.cpp
└── sort_lib
├── CMakeLists.txt
├── file_manager.cpp
└── sort_container.cpp
Для сортировки использовалась функция qsort
из cstdlib
.
На картинке ниже показан процесс работы программы над файлом размером 64 MB
P.S Данные изображение является не точным отображением скорости работы, а лишь демонстрируют принцип. Точно отобразить изменения не позволяют задержки, связанные с обновлением
watch
, выполнением командыod
и непосредственной интерпретации Bash'ем инструкций
В следующих gif'ках используется устаревшая версия программы. В целом работа осталось той же, только теперь добавились уведомления о завершении сортировки и вместо выбора пользователем файла для сохранения, теперь выбирается каталог
Обработка файла в 1GB занимает около 35 секунд на процессоре Intel Core i5-8250U
Так же выполнено требование по обработке ошибок. При любой исключительной ситуации выводится специальное окно с информацией о случившемся.
Например:
- Скачать репозиторий
- Перейти в ветку release
- Запустить скрипт
build.sh
- Запустить
uint32_sort_gui
- Vim как редактор кода
- GDB для отладки программы
- Bash для автоматизации рутинных и одномоментных действий
- Qt Creator только в качестве редактора интерфейса
- Valgrind для проверки утечек памяти