简体   繁体   中英

passing arguments to a thread

I have a thread to which i wish to pass 3 arguments. So, i put them in a struct as follows:

struct arg
{
time_t  time1;
float name1;
time_t quantum1;
};

I passed the arguments the following way:

 arg arg1;
 arg1.time1=(time_t)(int)job.peek(); //job.peek() was 3
 cout<<"job time is "<<arg1.time1<<endl; //this output 3

 arg1.name1=(float)(int)job.returnname(NULL); //job.returnname() was 1
 cout<<"job name is "<<arg1.name1<<endl;// this output 1

 arg1.quantum1=quantum; //quantum was 7
 cout<<"quantum is "<<arg1.quantum1<<endl;//this output 7

 pthread_create(&thread1, NULL, func3, (void*)(&arg1));

But when i checked these values at the beginning of the thread itself, they were changed.

 void* timer(void *argum)
 {
 arg *arg1= (arg*)argum;
 cout<<"PROCESS "<<arg1->name1<<" HAS ENTERED THE TIMER"<<endl; //this output arg1->name1 as 1.4013e-45
 cout<<"Time remaining for process is "<<arg1->time1<<endl; //this output arg1->time1 as -1218381144
 cout<<"quantum is "<<arg1->quantum1<<endl; //this output arg1->quantum1 as 5
 }

Can anybody tell me why this happened?
Thanks in advance!!

You should not pass the address of a local object (ie created on stack) out of the function. You should allocate it using malloc / new .

The problem is that you allocated arg1 on the stack, and that memory got out of scope and reused before the thread started executing. Allocate the arg object on the heap using malloc or new , and don't forget to de-allocate it after you're done, usually from within the thread you created.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM