Ho bisogno di parallelizzare alcune attività in un programma C++ e sono completamente nuovo alla programmazione parallela. Ho fatto alcuni progressi attraverso le ricerche su internet finora, ma sono un po 'bloccato ora. Mi piacerebbe riutilizzare alcuni thread in un ciclo, ma chiaramente non so come fare quello che sto cercando.Riutilizzo del thread in loop C++
Sto acquisendo i dati da due schede ADC sul computer (acquistate in parallelo), quindi ho bisogno di eseguire alcune operazioni sui dati raccolti (elaborati in parallelo) durante la raccolta della successiva serie di dati. Ecco alcuni pseudocodice per illustrare
//Acquire some data, wait for all the data to be acquired before proceeding
std::thread acq1(AcquireData, boardHandle1, memoryAddress1a);
std::thread acq2(AcquireData, boardHandle2, memoryAddress2a);
acq1.join();
acq2.join();
while(user doesn't interrupt)
{
//Process first batch of data while acquiring new data
std::thread proc1(ProcessData,memoryAddress1a);
std::thread proc2(ProcessData,memoryAddress2a);
acq1(AcquireData, boardHandle1, memoryAddress1b);
acq2(AcquireData, boardHandle2, memoryAddress2b);
acq1.join();
acq2.join();
proc1.join();
proc2.join();
/*Proceed in this manner, alternating which memory address
is written to and being processed until the user interrupts the program.*/
}
Questo è l'essenza principale di esso. La prossima esecuzione del ciclo scriverà agli indirizzi di memoria "a" durante l'elaborazione dei dati "b" e continuerà ad alternarsi (posso ottenere il codice per farlo, l'ho appena tolto per evitare di ingombrare il problema).
In ogni caso, il problema (come sono sicuro che alcune persone possono già dire) è che la seconda volta che cerco di usare acq1 e acq2, il compilatore (VS2012) dice "IntelliSense: chiamata di un oggetto di un tipo di classe senza operatore appropriato() o funzioni di conversione a tipo puntatore-a-funzione ". Allo stesso modo, se metto di nuovo std :: thread davanti a acq1 e acq2, si dice "errore C2374: 'acq1': ridefinizione, inizializzazione multipla".
Quindi la domanda è: posso riassegnare i thread a una nuova attività quando hanno completato l'attività precedente? Aspetto sempre che l'uso precedente del thread termini prima di chiamarlo di nuovo, ma non so come riassegnare il thread, e dato che è in un ciclo, non posso creare un nuovo thread ogni volta (o se potrebbe, che sembra uno spreco e inutile, ma potrei sbagliarmi).
Grazie in anticipo
Grazie a Oncaphillis, tra la tua risposta e quella di luk32, penso di rendermi conto di quale fosse il mio errore di sintassi. – notaCSmajor