Я пытаюсь создать своего рода монитор производительности для работы на плате частиц (на основе STM32). Я привык к программированию на c, поэтому подход ООП немного нов, но я думаю, что он хорошо подошел бы здесь.
Для целей этого вопроса давайте предположим, что у меня есть два типа мониторов:
- Частота. Приложение может вызвать «тиковый» метод монитора, чтобы вычислить время с момента его последнего запуска и сохранить его.
- Период - вызовите метод «Пуск» и «Стоп» монитора, чтобы рассчитать, сколько времени потребуется процессу для его запуска и сохранения.
То, что я хотел бы сделать, - это создавать экземпляры этих мониторов в моем приложении и иметь возможность сообщать статистику всех мониторов всех типов из основного модуля.
Я читал о шаблоне проектирования синглтона, который, кажется, может быть тем, что мне нужно, но я не уверен, и я также обеспокоен безопасностью потоков с этим.
Я думаю, что создам класс "StatMonitor" и производные классы "FrequencyMonitor" и "PeriodMonitor". Монитор был бы единичным, и везде, где я хотел создать новый монитор, я запрашивал экземпляр «Монитора» и использовал его следующим образом:
freqMonitor * task1FreqMonitor = StatMonitor::GetInstance()->Add_Freq_Monitor("Task1");
StatMonitor будет отслеживать все добавленные мной мониторы, и когда я захочу распечатать статистику, я могу просто вызвать метод printAll, который будет выполнять итерацию массива мониторов и запрашивать их результаты следующим образом:
StatMonitor::GetInstance()->PrintAllStats();
Я иду по правильному пути?