Обмен информацией о состоянии системы в нескольких процессах: статический класс |Внешний заголовок |Класс со статическими членами - PullRequest
0 голосов
/ 16 февраля 2019

Система: Nvidia Jetson TX2

ОС: Linux Ubuntu 16.04

Язык: C ++11


Проблема: Я проектирую встроенную систему, в которой будет несколько веток от одного процесса для выполнения различных задач.Родительский процесс будет похож на SystemController и будет получать команды IPC от программы связи Bluetooth.В этот момент поток будет разветвлен для выполнения данной задачи: т.е.сделать панорамное фото.

T1.Общайтесь по bluetooth

T2.Сфотографируйте

T3.Обработка изображений и загрузка

T4. - Будущая функциональность -

Мне нужен способ иметь статическое Состояние системы , которое будет доступно для чтения и записи всеми потоками в качестве способа указания состояниямежду нитями.Поэтому, когда поток, который снимает фотографии, захватывает, он может установить переменную состояния для родительского процесса для обратной связи с процессом Bluetooth через IPC.


Соображения:

Опции, которые я поместил в заголовок (Статический класс | Внешний заголовок | Класс со статическими членами), служат указателями на то, о чем я думаю в данный момент.Я думал, что класс со статическими атомарными переменными может быть хорошим вариантом (пример ниже).В этом случае я думал о том, чтобы иметь поток монитора состояния , который периодически проверяет и обновляет переменные в классе StateMonitor.

class StateMonitor
{
public:
   // Functions called by other processes
   bool getConnectedToWifi();
   bool getBLEPeripheralPaired();
   bool getCurrentlyTakingPhotos();
   void updateBLEPeripheralPaired();

   // Functions called by StateMonitor Process
   void updateConnectedToWifiStatus();
   void updateWifiNetworkConnectedTo();
   void updatedBatteryVoltage();

private:
   static std::atomic<bool> connectedToWifi;
   static std::atomic<bool> bLEPeripheralPaired;
   static std::atomic<bool> currentlyTakingPhotos;
   static std::atomic<string> wifiNetworkConnectedTo;
   static std::atomic<double> batteryVoltageLevel;
}

Вопрос:

Что было бы отличным способом обмена информацией о состоянии системы во всех потоках, разветвленных в процессе управления системой?Например: чтобы нить, делающая фотографии, могла быть проинформирована, когда нить, которая вращает устройство, завершена и, следовательно, должна сделать еще один снимок?

Редактировать

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

...