AvinashK
AvinashK

Reputation: 3423

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!!

Upvotes: 0

Views: 150

Answers (2)

epsalon
epsalon

Reputation: 2294

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.

Upvotes: 2

Igor R.
Igor R.

Reputation: 15085

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

Upvotes: 2

Related Questions