PThreads Problem mit Thread-Funktion
-
Hallo,
ich habe ein Problem mit der Thread-Funktion ich übergebe der Funktion ein vector mit den gespeicherten Werten
void* threadFuncRot(void* vector){ vector<int>* myvector = (vector<int>*) vector; ... } und bekomme folgende Meldung: image_histogramm_threadneu.cc: In function ‘void* threadFuncRot(void*)’: image_histogramm_threadneu.cc:24: error: expected primary-expression before ‘int’ image_histogramm_threadneu.cc:24: error: expected ‘;’ before ‘int’ image_histogramm_threadneu.cc:31: error: ‘myvector’ was not declared in this scopeIch habe quasi schon alles probiert und bin mit meinen Latein am Ende und ich weiß mir nicht zu helfen hat jemand Rat?

MfG
BigBiber89
-
Du benutzt zweimal den unqualifizierten Namen "vector", einmal für das Template aus std:: und einmal als Name des Parameters.
Versuche es mit
extern "C" void* threadFuncRot(void*); // <-- extern "C" ist wichtig void* threadFuncRot(void* pvec) // <-- heisst nicht mehr "vector" { vector<int> & myvec = *reinterpret_cast< vector<int>* >(pvec); cout << myvec.size() << '\n'; }PThreads erwartet einen Zeiger auf eine Funktion mit "C-Linkage".
Übrigens: Es gibt C++ Bibliotheken, die einem das Thread-Zeugs etwas angenehmer machen (wie zB Boost.Thread).
-
Wir sollen einmal ein Programm vergleichen einmal ohne threads und einmal mit threads und zwar müssen es pthreads sein. Beo ohne klappt es wunderbar und eigentlich wollte ich nur den Vector übergeben in den Vorlesungsfolien klappt es auch so gut zwar nicht mit ein Vector.
Da Problem ist auch das wir kein C Code benutzen dürfen es ist ein bisschen nervig da ich doch einfach nur den Vector übergeben möchte weil irgendwas klappt mit den reinterpretcast auch nicht.
-
Gut es lag einfach am Parameternamen es geht nun auch so wie ich es vorher hatte nur mit pvec ich habe ein Hädnchen für solche Fehler.
aber trotzdem Danke!
-
edit: blödsinn geschrieben^^