私は関数を介してtypedefを送信しようとしています。しかし、私はできないようです。typedefがpthreadで動作しないのはなぜですか?
#define MAX 2
typedef struct
{
unsigned long myPid;
unsigned long parentPid;
unsigned long myTid;
} myProperties;
void* funcproperties(void* arg);
void createthread(myProperties (*properties)[MAX]);
これは私のtypedefの定義方法です。
void* funcproperties(void* arg)
{
myProperties *properties=(myProperties*) arg;
properties->myPid=getpid();
properties->parentPid=getppid();
properties->myTid=syscall(SYS_gettid);
return NULL;
}
私はproperties[0].myPid=getpid()
に値を与えた場合、私は問題を持っていません。しかし、typedefが開始する位置(0または1)のアドレスを送信すると、それは実行されません。なぜだろう?多分pthreadはそれをサポートしませんか?
void createthread(myProperties (*properties)[MAX])
{
pthread_t tids[MAX];
for (int i = 0; i < MAX; i++) {
if ((errno = pthread_create(&tids[i], NULL, funcproperties, properties[i])) != 0)
ERROR(C_ERRO_PTHREAD_CREATE, "pthread_create() failed!");
}
for (int i = 0; i < MAX; i++)
printf("\n PID:%lu DAD: %lu TID: %lu", properties[i]->myPid, properties[i]->parentPid ,properties[i]->myTid);
}
このは(私が定義するのpidを強制する。しかし、私は間違っていないならば、私はランダムな値を取得しています)私は取得していた結果です。
PID:0 DAD: 3076323888 TID: 134519979
PID:612976384 DAD: 3077911516 TID: 3220212208
PID:0 DAD: 3076323888 TID: 134519979
PID:612976384 DAD: 3077911516 TID: 3220212208
PID:0 DAD: 3076323888 TID: 134519979
PID:612976384 DAD: 3077911516 TID: 3220212208
I 9292 did my job now make yourself served
PS:私もプロセスを使用しています。
「typedef」という用語の使用は、間違っていないと誤解を招くことがあります。私は関数に構造体を渡そうとしていると思いますが、構造体にタグがなく、型名が 'typedef'で指定されています。あなたが渡すものは 'typedef'ではなく、構造体または構造体へのポインタです。 –
私は、 'createthread()'関数に渡された配列へのポインタについて深く疑っています。あなたの呼び出し関数が 'myProperties mp [MAX];'を持ち、それを初期化して '&mp'を' createthread() 'に渡すと、' createthread() 'の' properties [1] 'はアレイ、これはトラブルの一部である可能性があります。 –