Pergunta

Eu estou procurando um cross-platform C ++ master / biblioteca trabalhador ou fila de trabalho biblioteca. A idéia geral é que o meu pedido seria criar algum tipo de tarefa ou Trabalho objetos, passá-las para o mestre trabalho ou fila de trabalho, que por sua vez executa o trabalho em segmentos ou processos separados. Para fornecer um pouco de contexto, a aplicação é um rasgador de CD, e as tarefas que eu quero parallelize são coisas como "track rip", "codificar WAV para MP3", etc.

Os meus requisitos básicos são:

  • Deve suportar um número configurável de tarefas simultâneas.
  • Deve suportar dependências entre tarefas, de tal forma que as tarefas não são executadas até que todas as tarefas que eles dependem tenham concluído.
  • Deve permitir o cancelamento de tarefas (ou pelo menos não me impede de codificação de cancelamento em minhas próprias tarefas).
  • Deve permitir relatórios de status e progresso informações de volta para o thread principal do aplicativo.
  • Deve trabalhar em Windows, Mac OS X e Linux
  • Deve ser de código aberto.

Seria especialmente bom se esta biblioteca também:

  • integrado com mecanismo de sinal / slot do Qt.
  • apoiou o uso de fios ou processos para a execução de tarefas.

Por analogia, eu estou procurando algo semelhante ao ExecutorService de Java ou alguma outra biblioteca thread pooling semelhante, mas em cross-platform C ++. Alguém sabe de tal uma besta?

Obrigado!

Foi útil?

Solução

Eu acho que isso exige intel do Threading Building Blocks , que praticamente faz o que quiser.

Outras dicas

Eu nunca usei isso em tempo suficiente para que eu não tenho certeza se é exatamente atenda às suas necessidades, mas confira o Adaptive Communications Environment (ACE) . Esta biblioteca permite construir "objetos ativos" que têm filas de trabalho e executar o seu corpo principal em seus próprios tópicos, bem como conjuntos de encadeamentos que podem ser compartilhados amoung objetos. Então você pode passar fila objetos de trabalho para objetos ativos para que eles processo. Os objetos podem ser encadeados de várias maneiras. A biblioteca é bastante pesado e tem muito a ele para aprender, mas tem havido um par de livros escritos sobre o assunto e há uma boa quantidade de informações tutorial disponível on-line também. Ele deve ser capaz de fazer tudo o que quiser e muito mais, a minha única preocupação é se ele possui as interfaces que você está procurando 'fora da caixa', ou se você precisa para construir em cima dela para obter exatamente o que procura para.

Confira Intels' Tópico Building Blocks biblioteca.

Parece que requerem algum tipo de "Sharing System Time".

Há alguns bons de código aberto lá fora, mas eu não sei
se tiverem suporte embutido slot de QT.

Este é provavelmente um enorme exagero para o que você precisa, mas ainda vale a pena mencionar -
BOINC é uma estrutura distribuída para tais tarefas. Há um servidor principal que dá tarefas a executar e uma nuvem de trabalhadores que fazem sua licitação. É a estrutura por trás de projetos como o SETI @ home e muitos outros.

Veja este post para criar tópicos usando a biblioteca de impulso em C ++:

exemplo simples de rosqueamento em C ++

(é um fio c ++, mesmo que o título diz c)

basicamente, criar seu próprio objeto "mestre" que leva um objeto "executável" e começa a correr em um novo segmento.

Em seguida, você pode criar novas classes que implementam "executável" e jogá-los ao longo de seu corredor mestre toda a hora velha você quer.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top