Система: 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;
}
Вопрос:
Что было бы отличным способом обмена информацией о состоянии системы во всех потоках, разветвленных в процессе управления системой?Например: чтобы нить, делающая фотографии, могла быть проинформирована, когда нить, которая вращает устройство, завершена и, следовательно, должна сделать еще один снимок?
Редактировать
В настоящее время мой подход заключается в использовании одноэлементного класса состояний, который действует как «база данных» значений состояний.Все потоки имеют доступ к значениям состояния и могут обновляться.