У меня вопрос по многопоточности. У меня довольно большой проект, и сейчас я пишу некоторый exe-клиент для использования всего этого кода. Он включает в себя многопоточность и межпроцессное взаимодействие. У меня есть основной, который выглядит так:
int main(int argc, char** argv)
{
std::unique_ptr<CommunicationWrapper> wrapper;
wrapper = std::make_unique<CommunicationWrapper>(argv[1]);
wrapper->run();
return 0;
}
Ниже находится класс, который осуществляет межпроцессное взаимодействие, которое выглядит так:
CommunicationEngine::CommunicationEngine()
: m_processingLoop(std::async(std::launch::async, [this]() { processingLoop(); }))
{}
CommunicationEngine::~CommunicationEngine()
{
m_processingLoop.wait();
}
//some long function that do a lot of stuff based on messages from anothre process
void CommunicationEngine::processingLoop() const
Этот код работает без проблем, но я хочу знать, считается ли это хорошей практикой и хорошим дизайном для выполнения синхронизации (ожидания) при вызове деструктора? Каковы возможные питфалы такого подхода?