Я ищу кросс-платформенную библиотеку C ++ master / worker или библиотеку рабочей очереди. Общая идея заключается в том, что мое приложение будет создавать какие-либо объекты Task или Work, передавать их в мастер-работу или рабочую очередь, которые, в свою очередь, будут выполнять работу в отдельных потоках или процессах. Чтобы обеспечить немного контекста, приложение представляет собой риппер компакт-диска, а задачи, которые я хочу распараллелить, включают такие вещи, как «риппинг», «кодирование WAV в Mp3» и т. Д.
Мои основные требования:
- Должно поддерживать настраиваемое количество одновременных задач.
- Должен поддерживать зависимости между задачами, чтобы задачи не выполнялись до тех пор, пока не будут выполнены все задачи, от которых они зависят.
- Должен допускать отмену задач (или, по крайней мере, не мешать мне кодировать отмену в мои собственные задачи).
- Должен позволять сообщать о состоянии и информации о ходе выполнения обратно в главный поток приложения.
- Должен работать в Windows, Mac OS X и Linux
- Должен быть открытым исходным кодом.
Было бы особенно хорошо, если бы эта библиотека также:
- Интегрирован с механизмом сигналов / слотов Qt.
- Поддерживается использование потоков или процессов для выполнения задач.
В качестве аналогии я ищу что-то похожее на Java ExecutorService или какую-то другую подобную библиотеку пула потоков, но в кроссплатформенном C ++. Кто-нибудь знает такого зверя?
Спасибо!