несколько функций для запуска UDP сервера на асио с коллбэками на прием данных:
                  
                  
                  static asio::io_context io_context;
                  
                  
                  static HSA::Adapter* adapter = nullptr;
                  
                  
                  
                  
                  
                  extern "C" HSA_EXPORT void Run() { io_context.run(); }
                  
                  
                  extern "C" HSA_EXPORT void Stop() { io_context.stop(); }
                  
                  
                  extern "C" HSA_EXPORT void CreateAdapter() { adapter = new HSA::Adapter(io_context); }
                  
                  
                  extern "C" HSA_EXPORT void FreeAdapter() { delete adapter; adapter = nullptr; }
                  
                  
                  extern "C" HSA_EXPORT void SetCallback(HSA_TelemetryCallback callback) { adapter->setTelemetryUnmangledCallback(callback); }
                  
                  
                  extern "C" HSA_EXPORT HSA_Telemetry Read() { return adapter->telemetryUnmangled(); }
                  
                  
                  Проблема заключается в том, что io_context.run блокирует основной поток программы, из которого эта функция вызывается (сама конечная программа на C#, если это важно). Как можно корректно обернуть все это в фоновый поток, чтобы функция Run() была неблокирующей?
                  
                  
                
Вызов run надо в поток
Не ясно что за вопрос. Что значит корректно, как обернуть... Так то всё просто, взять и обернуть, но может у тебя какие-то требования есть
 d
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          d
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Уже обернул в простой detach(), проблема решена.
Detached thread имеется в виду?
 d
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          d
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  extern "C" HSA_EXPORT void Run() { std::thread t([]() { io_context.run(); }); t.detach(); }
А останавливать как это дело будешь? А результат как получать обратно?
Не лучше ли то же самое делать в приложении?
 d
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          d
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Останавливаю через вызов io_context.stop(). Результат через коллбэк.
А синхронизация?
Как включить syntax highlighting в ` коде?
 d
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          d
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  дописать cpp после открывающих тройных кавычек
Если что, смотри в закрепе, там всё написано
Обсуждают сегодня