Instanze an Thread übergeben
-
Servus,
Ist es möglich das ich an einen Thread eine Instanz übergeben. Also etwa so:
void *setElements() { while(true) { mk->setElementsToMatrix(); } } int main(int argc, char *argv[]) { MatrixKlasse *mk = new MatrixKlasse(...); int iret1 = pthread_create(&thread_ViewMatrix, Null, setElements, mk); }Bei dem ganzen geht es um einen Roboter der sich bewegt. Und so lange er sich bewegt soll alles was er sieht in eine Matrix übertragen werden. Die Matrix ist in der Instance mk und soll ständig durch die Funktion setElementsToMatrix beschrieben werden. Wenn der Roboter nichts mehr zu sehen hat soll er anhalten und ich lasse mir von meiner Funktion mk->wenigGesehen die Felder zurückgeben die ich am wenigsten oft gesehen habe.
Kann mir da einer helfen, oder ist mein Ansatz mit dem Thread und der Instanze schon total doof?Dank und Gruß
flambert
-
warum zwei threads?
ist der eine die steuerung und die läuft ständig, also mit polling der sensoren, und der andere macht ein-ausgabe zum user?dann wären die geeigneten mittel pipes oder zur not auch sockets oder semaphorengesteuerte container.
-
Ich muss zugeben das ich mit c++ noch nicht so viel gemacht habe. Aber mein Problem ist auch die Zeit. Mal in kürze zu meinem Programm:
-Ich gebe dem Roboter eine Zahl von Punkten vor die er abfahren soll.
-Während er die Punkte abfährt merkt er sich über die Funktion "setElementsToMatrix()" alles gesehene in einer Matrix in der Instanze "mk".
-Wenn der Roboter im Hauptprogramm alle Punkt abgefahren hat soll der Thread beendet werden.
-Dann rufe ich eine andere Funktion von mk auf. Sowas wie "mk->WoWarIchNochNicht()".
-Dann fängt alles von vorne an. Nur eben mit einer anderen Liste von Punkten.Das ganze würde ich gerne so einfach wie möglich Lösen. Ich habe auch kein Problem mit den Zugriffsrechten oder Thread-Stabilität da ich alles immer schließe bevor ich es auswerte.
Ist das vernünftig, oder bin ich mit Threads doch auf dem ganz falschen Dampfer?
Gruss
flambert
-
flambert schrieb:
Ist das vernünftig, oder bin ich mit Threads doch auf dem ganz falschen Dampfer?
ja, ist wohl der falsche dampfer.
das rumfahren ist nur ne funktion mit ner schleife drin.
-
Vielleicht reicht meine Pseudo Code Erklärung auch noch nicht. Ich versuche es mal nochmal:
void *setElements() { while(true) { mk->setElementsToMatrix(); } } int main(int argc, char *argv[]) { MatrixKlasse *mk = new MatrixKlasse(...); int iret1 = pthread_create(&thread_ViewMatrix, Null, setElements, mk); for(int i=0;i<length(PunkteListe);i++) { while(Roboter den Punkt noch nicht erreicht hat) { Roboter fahre zu Punkt PunkteListe[i] } } thread_ViewMatrix stop; NeuePunkteListe=mk->gibMirPunkteAnDenenIchNochNichtWar(); thread_ViewMatrix start; for(int i=0;i<length(NeuePunkteListe);i++) { while(Roboter den Punkt noch nicht erreicht hat) { Roboter fahre zu Punkt PunkteListe[i] } } }Kann man das besser verstehen? Ich bin nicht so gut im Erklären.