Собственно задача стара как мир: есть дочерний поток для тяжелых задач, с которым нужно общаться из основного потока.
Моя, дополнительная задача состоит в том, чтобы скрыть всю головную боль от общения между потоками в C++ в удобную обёртку.
Сама задача, в целом, решена, но интересуют мелкие нюансы.
Полный, рабочий пример кода залил на github. Основной класс: worker.cpp worker.h
В комментариях подробно описаны мои проблемы с текущей реализацией.
Дублирую основные вопросы, для удобства:
- Безопасно ли использовать bool в данном коде, или стоит использовать atomic/mutex(для сложный объектов)?
- Есть ли более простой способ вызова методов, без
QMetaObject::invokeMethod
и макросов? - Можно ли избежать дублирования сигналов?
- Есть ли более простые (меньше кода), готовые реализации?
* в данном примере Worker'а не заботят логические ошибки, типа вызова resume, до start. Этим занимается родительский код.
cast eao197