Раз десять лет, то из самого неочевидного с многопоточкой — нужно все треды джойнить, если не было детача.
Пример из книжки «CPP Concurrency in Action» Williams A.
If you don’t need to wait for a thread to finish, you can avoid this exception-safety
issue by detaching it. This breaks the association of the thread with the std::thread object
and ensures that std::terminate() won’t be called when the std::thread object is
destroyed, even though the thread is still running in the background.
Здравствуйте, Volopass, Вы писали:
V>нужно кидать event с данными. V>хорошо бы примерчик на основе std::condition_variable.
std::future и есть суть данные + событие (однократное).
Для того чтобы бросить такое событие нужен std::promise.
Пример: https://en.cppreference.com/w/cpp/thread/promise
std::condition_variable под капотом и для использования напрямую, в сценарии посылки данных, больше не нужны.
Здравствуйте, Volopass, Вы писали:
V>нужно кидать event с данными. V>хорошо бы примерчик на основе std::condition_variable.
Для того, чтобы написать пример, нужно знать про задачу немного поболее.
1) event с данными должен приходит регулярно или спорадически?
2) обработка данных предполагается последовательно или паралельно?
3) нужно ли соблюдать timout'ы какого либо рода?
4) сколько ниток создают данные: одна или более?
5) сколько ниток обрабатывают данные: одна или более?
6) что важнее: скорость выполнения или удобство чтения/модификации кода?