文字列型ベクトル要素をpthread_create()関数に渡そうとしています。メッセージは出力に印刷されません。どこが間違っていますか?pthread_create()にstring型のベクトル要素を引数として渡すにはどうすればよいですか?
#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;
}
出力:
がスレッドを実行
がスレッドを実行
がスレッドを実行
がスレッドを実行
実行中のスレッド= = = = =
もしあなたがC++ 11にアクセスできるのであれば、 'std :: thread'を打つことをお勧めします。それは実際には型システムで動作します。これはもはや 'void * 'を意味しません。 – NathanOliver
なぜCスタイルのコードをC++で書いていますか?なぜ定数にマクロを使用していますか?なぜ 'std :: thread'を使わないのですか? –