Wiederverwendung thread in der Schleife c++

Brauche ich, um zu parallelisieren, einige Aufgaben, die in einem C++ - Programm und bin völlig neu mit der parallelen Programmierung. Ich habe einige Fortschritte durch internet-Recherchen so weit, aber bin ein wenig stecken jetzt. Ich möchte Wiederverwendung einige threads in einer Schleife, aber offensichtlich nicht wissen, wie zu tun, was ich versuche.

Ich bin mit der Erfassung von Daten aus zwei ADC-Karten auf dem computer (erworben in parallel), dann brauche ich, um einige Operationen durchzuführen, die auf die gesammelten Daten (parallele Verarbeitung), während das sammeln der nächste Stapel von Daten. Hier etwas pseudocode zur Veranschaulichung

//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.*/
}

Das ist der wichtigste Kern von ihm. Der nächsten Ausführung der Schleife schreiben würde, das "eine" Speicher-Adressen während der Verarbeitung der "b" - Daten und weiterhin abwechseln (ich kann den code dazu, nur nahm es heraus um zu verhindern, unübersichtlich bis das problem).

Trotzdem ist das problem (wie ich bin sicher, manche Leute können das schon sagen) ist, dass die zweite Zeit, die ich versuche zu verwenden acq1 und acq2, der compiler (VS2012) sagt, "IntelliSense: Aufruf an ein Objekt einer Klasse geben, die ohne die entsprechenden operator - () oder das conversion-Funktionen Zeiger auf Funktion vom Typ". Ebenso, wenn ich die std::thread vor acq1 und acq2 wieder, heißt es " Fehler C2374: 'acq1' : Neudefinition; mehrere Initialisierung".

Die Frage ist also, kann ich zuweisen von threads zu einer neuen Aufgabe, wenn Sie abgeschlossen haben Ihre vorherigen Aufgabe? Ich warte schon immer für den vorherigen Einsatz der thread zu Ende bevor Sie es wieder, aber ich weiß nicht, wie die übernahme der thread, und da es in einer Schleife, ich kann nicht machen, einen neuen thread jedes mal (oder wenn ich könnte, scheint verschwenderisch und unnötig, aber ich könnte falsch sein).

Vielen Dank im Voraus

InformationsquelleAutor notaCSmajor | 2014-10-22
Schreibe einen Kommentar