Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 2505
  • Last Modified:

pass parameter to pthread_create

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
mstrelan
Asked:
mstrelan
2 Solutions
 
Infinity08Commented:
You can pass a struct that contains the parameters you want to pass.
0
 
sunnycoderCommented:
>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
 
mstrelanAuthor Commented:
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

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now