Мне нужно как-то дождаться завершения инициализации, прежде чем я смогу вызвать get_device_params.
Поскольку у вас, по-видимому, есть какой-то FSM внутри process_events()
, и поэтому он когда-либо работает в отдельном потоке, вы не должны ничего делать из основного потока с устройством.
Другими словами, логически, вызов к get_device_params();
должен быть сделан внутри FSM, если инициализируется устройство EVT_INITIALIZED
, которое, как я полагаю, запускается initialize_device()
.
В качестве альтернативы, вы можете создать второй FSM (возможно, в другом потоке) и позволить process_events()
(первый FSM) после того, как он завершил свою собственную обработку, перенаправить событие EVT_INITIALIZED
на второй FSM. (Или initialize_device()
может отправить событие обоим автоматам одновременно.)
Мне кажется (из-за недостаточного кода, который вы опубликовали), что ваша проблема в том, что вы пытаетесь смешать последовательный код с кодом, основанным на событиях. Основное правило: в приложении, основанном на событиях / FSM, весь код должен запускаться внутри FSM, будучи вызванным событием; не должно быть кода, который может запускаться отдельно от FSM.