Domanda

Sto cercando un C ++ maestro libreria multi-piattaforma / lavoratore o libreria di coda di lavoro. L'idea generale è che la mia domanda avrebbe creato una sorta di attività o di lavoro oggetti, passarli al master di lavoro o di coda di lavoro, che a sua volta eseguire il lavoro in thread o processi separati. Per fornire un po 'di contesto, l'applicazione è un ripper cd, ei compiti che voglio parallelizzare sono cose come "traccia rip", "codificare WAV a MP3", ecc.

I miei requisiti di base sono:

  • Deve supportare un numero configurabile di attività simultanee.
  • deve supportare le dipendenze tra le attività, in modo tale che le attività non vengono eseguite fino a quando tutte le attività che essi dipendono hanno completato.
  • deve permettere la cancellazione di compiti (o almeno non mi impedisce di codifica cancellazione nelle mie attività).
  • Deve consentire la segnalazione di stato e il progresso informazioni al thread dell'applicazione principale.
  • Deve funzionare su Windows, Mac OS X, e Linux
  • Deve essere open source.

Sarebbe particolarmente bello se questa libreria anche:

  • integrato con meccanismo segnale / slot di Qt.
  • sostenuto l'uso di fili di o processi per l'esecuzione di attività.

Per analogia, sto cercando qualcosa di simile a ExecutorService di Java o di qualche altra libreria di thread simile messa in comune, ma in cross-platform C ++. Qualcuno sa di una bestia?

Grazie!

È stato utile?

Soluzione

Credo che questo richiede Threading Building Blocks di Intel, che fa più o meno quello che vuoi.

Altri suggerimenti

Non ho usato in abbastanza a lungo che io non sono positivi se soddisfa esattamente le vostre esigenze, ma guarda che la Adaptive Communications Environment (ACE) . Questa libreria permette di costruire "oggetti attivi" che hanno code di lavoro e eseguire il loro corpo principale nelle loro discussioni, così come i pool di thread che possono essere condivisi amoung oggetti. Poi si può passare oggetti di lavoro della coda a oggetti attivi per loro di elaborare. Gli oggetti possono essere concatenati in vari modi. La biblioteca è abbastanza pesante e ha un sacco di esso per imparare, ma ci sono stati un paio di libri scritti su di esso e c'è una discreta quantità di informazioni esercitazione disponibili anche online. Dovrebbe essere in grado di fare tutto quello che volete e molto di più, la mia unica preoccupazione è se esso possiede le interfacce che stai cercando 'out of the box' o se avresti bisogno di costruire su di esso per ottenere esattamente quello che stai cercando per.

Scopri Intels' rel="nofollow Far passare biblioteca Building Blocks .

Suona come avete bisogno di una sorta di "System Time Sharing".

Ci sono alcuni buoni open source là fuori, ma non so
se hanno il supporto integrato slot di QT.

Questo è probabilmente un enorme eccessivo per quello che ti serve, ma comunque degni di nota -
BOINC è un framework distribuito per tali compiti. C'è un server principale che dà i compiti da eseguire e una nuvola di lavoratori che fanno la sua offerta. E 'il quadro dietro progetti come SETI @ Home e molti altri.

Si veda questo post per la creazione di thread utilizzando la libreria spinta in C ++:

semplice esempio di filettatura in C ++

(si tratta di un filo C ++, anche se il titolo dice c)

In sostanza, creare il proprio oggetto "master" che prende un oggetto "eseguibile" e inizia a farlo funzionare in un nuovo thread.

Quindi è possibile creare nuove classi che implementano "eseguibile" e li gettano verso il tuo padrone corridore qualsiasi vecchio volta che si desidera.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top