Solved

pass parameter to pthread_create

Posted on 2008-10-22
3
2,485 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

ScreenConnect 6.0 Free Trial

At ScreenConnect, partner feedback doesn't fall on deaf ears. We collected partner suggestions off of their virtual wish list and transformed them into one game-changing release: ScreenConnect 6.0. Explore all of the extras and enhancements for yourself!

Question has a verified solution.

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

Suggested Solutions

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…
Windows programmers of the C/C++ variety, how many of you realise that since Window 9x Microsoft has been lying to you about what constitutes Unicode (http://en.wikipedia.org/wiki/Unicode)? They will have you believe that Unicode requires you to use…
The goal of this video is to provide viewers with basic examples to understand opening and writing to files 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.

785 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