私はcppとスレッドの初心者です。pthread関数に複数の引数を渡すためにstackoverflowのいくつかのコードスニペットを参照し、以下のコードを思い付きました。渡された(void *)ポインターを使用して、関数内の構造体メンバーにアクセスする方法がわかりません。誰か説明できますか?
#include <iostream>
#include <pthread.h>
#include <vector>
using namespace std;
struct a{
vector <int> v1;
int val;
};
void* function(void *args)
{
vector <int>functionvector = (vector <int>)args->v1;
functionvector.push_back(args->val);
return NULL;
}
int main()
{
pthread_t thread;
struct a args;
pthread_create(&thread, NULL, &function, (void *)&args);
pthread_join(thread,NULL);
for(auto it : args.v1)
{
cout<<it;
}
return 0;
}
エラーの取得:エラー: 'void *'はオブジェクトへのポインタ型ではありません
にa
キャストvoid*
バックするまで、のメンバーにアクセスすることはできませんa*
。
void* function(void *ptr)
{
a* args = static_cast<a*>(ptr);
args->v1.push_back(args->val);
return NULL;
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加