我正在开发一个多线程应用程序,其中客户端程序生成将字符串发送到数据服务器程序的请求线程,数据服务器程序通过发送回字符串来回答。不幸的是,我无法将数据从客户端的主函数传递到每个请求线程调用的函数。在 main 中,我得到了这样的请求线程(一些以前的变量声明未显示):
for(int j = 0; j < persons.size(); j++){ //requests deal with imaginary people
thread_args* dat = new thread_args;
strcpy(dat->str, persons[j].c_str());
cout << "***I COPIED " << dat->str << " INTO dat->str!!!"<<endl; //prints as expected
pthread_create(&request_thread[j],NULL,&deposit_requests, &dat);
}
具体来说,我用来通过线程传递事物的结构如下所示:
typedef struct str_thdata{
char str[100];
} thread_args;
现在,在 main ("***I COPIED...") 中的 cout 中,一切都很好。确实复制了正确的值。但是,当我到达线程调用的实际函数时,字符串丢失了:
void* deposit_requests(void* str_arg){
for(int i = 0; i < req_per_person; i++){
thread_args* data = (thread_args*)str_arg;
cout << "data->str is " << data->str << endl; //empty string!!!
...
}
}
我唯一的想法是,也许有些事情超出了范围?除非我在这里失明,否则我看不到它会发生在哪里。或者也许我需要在某个地方进行额外的演员表?我在第二个 cout 中尝试了一些变体(例如,使用 ((thread_args*)data)->str) ),但这似乎不起作用。我的字符数组发生了什么?