我有两个主题。 一个是创建结构并用数据填充它:
int main(int argc, char *argv[]) {
struct arg_struct args;
args.remoteSockfd = remoteSockfd;
/*...*/
args.active = 1;
然后我将它添加到数组中:
while(activeSockets[index].active!=0){
index++;
}
activeSockets[index] = args;
并创建新主题:
(void) pthread_create(&serverThread, NULL, threadBody, &args);
}
在第二个帖子中我有:
void *threadBody(void *args) {
/*...*/
arg_struct *foo = (arg_struct*) (args);
}
所以现在我可以在结构中访问变量:
sockfd = foo->remoteSockfd;
但是当我尝试修改它们时:
foo->active=0;
它不会在第一个线程中更改变量。如何在另一个线程的第一个线程中修改struct?
答案 0 :(得分:0)
我怀疑你的问题在这里:
activeSockets[index] = args;
这是复制结构中的数据而不是指向它的指针。如果在另一个线程中修改args,则不会更改activeSockets中的数据。您需要将activeSockets设为指针数组,而不是结构体,或者将& activeSockets [i]传递给另一个线程。
无论如何,这是我的猜测。