Solved

pass parameter to pthread_create

Posted on 2008-10-22
3
2,481 Views
Last Modified: 2012-05-05
Probably too easy to Google but easier to just ask the experts :P

I have a call to pthread_create(&tid, &attr, workthread, NULL);

I want to be able to send a mixed array as the parameters... to be more precise I want to pass an int (sockfd) a string (message received on the socket).

How do I do this and how to I handle it in workthread?

Cheers guys
0
Comment
Question by:mstrelan
3 Comments
 
LVL 53

Assisted Solution

by:Infinity08
Infinity08 earned 50 total points
ID: 22776823
You can pass a struct that contains the parameters you want to pass.
0
 
LVL 45

Accepted Solution

by:
sunnycoder earned 200 total points
ID: 22779321
>How do I do this and how to I handle it in workthread?

int pthread_create(pthread_t *restrict thread,
                                const pthread_attr_t *restrict attr,
                                 void *(*start_routine)(void*),
                                 void *restrict arg);

the last parameter is the argument to the thread. It is a void * and hence you can cast any pointer type to a void *. Thread start routine also expects a void * argument. Inside the thread cast the void pointer to whatever type your thread is expecting. Since you need to pass a mix of values, it makes sense to bundle them in a struct as I08 already pointed out, cast a pointer to this struct to void * and pass it in the call to pthread_create and inside the routine cast it back to your struct pointer type. Something like
struct my_args {

      int val1;

      float val2;

      char * val3;

}
 

...

int main ()

{

   struct my_args args;

   ...

   args.val1 = 10;

   args.val2 = 3.14;

   args.val3 = "Hello world";

   pthread_create (&thread_id, &attr, launch_thread, &args );

   ...

}
 

void * launch_thread (void * args)

{

   struct my_args * pargs = (struct my_args *) args;

   printf ("My parameters %d %f %s\n", pargs->val1, pargs->val2, pargs->val3 );

   ...

}

Open in new window

0
 
LVL 10

Author Comment

by:mstrelan
ID: 22800742
NOTE!!!! There is a semi colon missing after the struct declaration
struct my_args {

      int val1;

      float val2;

      char * val3;

}; // <--------------- added semicolon 

Open in new window

0

Featured Post

Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

Join & Write a Comment

Suggested Solutions

Have you thought about creating an iPhone application (app), but didn't even know where to get started? Here's how: ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Important pre-programming comments: I’ve never tri…
Preface I don't like visual development tools that are supposed to write a program for me. Even if it is Xcode and I can use Interface Builder. Yes, it is a perfect tool and has helped me a lot, mainly, in the beginning, when my programs were small…
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use while-loops in the C programming language.
The goal of this video is to provide viewers with basic examples to understand how to create, access, and change arrays in the C programming language.

707 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now