Ich versuche String-Vektorelement an die Funktion pthread_create() übergeben. Die Nachricht wird nicht in der Ausgabe gedruckt. Wo liege ich falsch?Wie übergibt man ein Vektorelement vom Typ string als Argument an pthread_create()?
#include <iostream>
#include <pthread.h>
#include <cstdlib>
#include <vector>
using namespace std;
#define NUM_THREADS 5
void *print_thread_details(void *thread_no){
std::string str = *reinterpret_cast<std::string*>(thread_no);
cout<<"\n Running thread = "<<str<<endl;
pthread_exit(NULL);
}
int main(){
/*initialize an array of pthreads*/
pthread_t threads[NUM_THREADS];
int rc;
vector<string> v(NUM_THREADS);
for(int i=0;i<NUM_THREADS;i++){
string s = "Thread No = ";
char temp = i+'0';
s=s+temp;
v.push_back(s);
rc = pthread_create(&threads[i], NULL, print_thread_details,&v[i]);
if (rc){
cout << "Error:unable to create thread," << rc << endl;
exit(-1);
}
}
pthread_exit(NULL);
return 0;
}
Output:
laufenden Faden =
Fadenlauf- =
Fadenlauf- =
Fadenlauf- =
Fadenlauf- =
Wenn Sie Zugriff auf C++ 11 haben, empfehle ich Ihnen wirklich, 'std :: thread' eine Aufnahme zu machen. Es funktioniert tatsächlich mit dem Typsystem, das bedeutet nicht mehr "void". – NathanOliver
Warum schreiben Sie C-Style-Code in C++? Warum verwenden Sie Makros für Konstanten? Warum benutzt du nicht 'std :: thread'? –