Проект представляет из себя шаблонный менеджер задач, в данный момент добавлен лишь 1 тип задач, который из себя представляет просто числовые задачи которые имитируют выполнение(прибавляются числа от начального до конечного значения).
ОСОБЕННОСТИ ВЕТОК: master:Первоначальный вариант minimal:Упрощенный вариант без выкрутасов. develop:Добавлены консольные параметры(вызов справки через -h), добавлена сериализация тасок, восстановление воркеров и задач при неожиданном закрытии ПО.
Технологии: Qt, MVC, потоки (Qt) и синхронизация, наследование/полиморфизм, QML.
Задача: Написать приложение с использованием Qt и QML, которое создает и обрабатывает различные задачи в нескольких потоках с отображением статуса задачи и ее прогресса обработки в интерфейсе.
Функциональные требования:
- Программа должна быть кроссплатформенной.
- Должна быть возможность изменения числа исполнителей (от 1 до 1000). Допустимы ограничения в виде изменения числа исполнителей только если список задач пуст.
- Должна быть возможность добавления произвольного числа (от 1 до 1000) новых задач.
- Каждому исполнителю должен соответствовать свой поток.
- Задачи должны автоматически обрабатываться свободными исполнителями по принципу: одна задача - один исполнитель (один поток).
- Обработка задачи представляет собой последовательный вызов функции обработки в задаче пока задача не будет завершена. Завершение задачи может определяться как отдельной функцией, так и проверкой прогресса на 100%.
- После завершения обработки задачи, она должна в течении 5 секунд отображаться со статусом «Завершена», после чего должна быть удалена. В ходе этих 5 секунд исполнитель считается занятым этой задачей и приступает к обработке следующей только после удаления задачи.
- В текущем решении каждая задача должна производить последовательное увеличение внутреннего счетчика от одного случайного значения до другого. Увеличение производится на произвольную величину (инкремент).
- Длительность обработки задачи должна быть в пределах от 5 до 30 секунд (надо подобрать начальное, конечное и инкрементное значения и задержку между вызовами обработки для выполнения данного требования). Допустимы отклонения максимального значения времени обработки до 60 секунд.
- При создании задачи ее тип должен выбираться случайно.
- В текущем решении тип задачи определяет тип данных, который используется в задаче для инкремента. Типы задач:
- char
- uchar
- short
- ushort
- int
- uint
- В ходе выполнения задачи должен обновляться ее прогресс бар и общий прогресс бар всех задач.
- Обновление данных в интерфейсе должно происходить только при необходимости.
- В любой момент времени завершение программы при закрытии должно происходить в течении 500мс и должно происходить корректно.
Нефункциональные требования:
- В интерфейсе должен отображаться список исполнителей и список задач.
- Каждый исполнитель в списке исполнителей должен отображать:
- номер исполнителя (последовательный уникальный номер начиная с 1),
- статус работы (Ожидает, работает над задачей №num).
- Каждая задача в списке задач должна отображать:
- номер задачи (последовательный уникальный номер начиная с 1),
- тип задачи,
- статус (ожидает, выполняется исполнителем №num, завершена),
- прогресс выполнения в виде прогресс бара с числовым указанием % (от 0 до 100).
- В интерфейсе должен быть функционал для быстрого добавления указанного числа задач.
- В интерфейсе должен отображаться общий прогресс бар выполнения всех задач.
- Прогресс бар у большинства задач должен двигаться плавно, без рывков.
- (опционально) Появление и удаление задач должно происходить с анимацией.
- Архитектурное решение должно быть расширяемым для добавления новых типов задач с произвольной обработкой (например, с уменьшением чисел или вообще не связанной с числами), но с сохранением требований касательно подсчета прогресса выполнения задачи. Статусы задачи зависят от ее типа (у новой задачи помимо статусов указанных в пункте 3 могут быть еще и свои статусы, например, «Сканирование каталогов», «Поиск файлов», «Подсчет свободного места», …).