?
Solved

pass parameter to pthread_create

Posted on 2008-10-22
3
Medium Priority
?
2,507 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 200 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 800 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

Free tool for managing users' photos in Office 365

Easily upload multiple users’ photos to Office 365. Manage them with an intuitive GUI and use handy built-in cropping and resizing options. Link photos with users based on Azure AD attributes. Free tool!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Summary: This tutorial covers some basics of pointer, pointer arithmetic and function pointer. What is a pointer: A pointer is a variable which holds an address. This address might be address of another variable/address of devices/address of fu…
There's never been a better time to become a computer scientist. Employment growth in the field is expected to reach 22% overall by 2020, and if you want to get in on the action, it’s a good idea to think about at least minoring in computer science …
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 and use conditional statements in the C programming language.
Suggested Courses

594 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