LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (http://www.linuxquestions.org/questions/programming-9/)
-   -   Passing Arguments into the Thread Function (http://www.linuxquestions.org/questions/programming-9/passing-arguments-into-the-thread-function-283218/)

George_gk 01-28-2005 05:11 AM

Passing Arguments into the Thread Function
 
Hello,

I try to write a simple program for creating threads in C++. If I don't have arguments in the Thread Function, it works fine. The problem arises when I try to pass an argument to this function. I have found various code examples, but they all cause compile errors. More specifically, the part of my code concerning the thread creation is the following:


#include <pthread.h>

struct two_args {
int arg1;
int arg2;
};

void *needs_2_args(void *);

void
a()
{
pthread_t t;
struct two_args *ap;

ap = (struct two_args *) malloc(sizeof (struct two_args));
ap->arg1 = 1;
ap->arg2 = 2;
error = pthread_create(&t, NULL, needs_2_args, (void *) ap);
if (error != 0)
deal_with_error ();
}

void *
needs_2_args(void *ap)
{
struct two_args *argp = (void *) ap;
int a1, a2;

a1 = argp->arg1;
a2 = argp->arg2;
free(argp);
}


While compiling, I get the following error:

In function void* needs_2_args(void*)
invalid conversion from 'void*' to 'two_args*'

Similar compile response appears, even if I use a simple argument (e.g. int) and not a struct. As I said before, I have used many code examples from the internet, but they are all similar and I get the same output.

The compiling part of my Makefile is the following:
g++ -c -o $(LIB_DIR)/Test.o -l $(INC_LIB) $(SRC_DIR)/Test.cpp

Do I forget an option? I am using also -lpthread but in the linking part. Should I use it also in the compiling part? If yes, in which place?

Please note that I don't have any experience in Linux Programming.

Thanks in advance,
George

Mara 01-28-2005 03:15 PM

Re: Passing Arguments into the Thread Function
 
Code:

void *
needs_2_args(void *ap)
{
  struct two_args *argp = (struct two_args *) ap;
  int a1, a2;

  a1 = argp->arg1;
  a2 = argp->arg2;
  free(argp);
}

I think it should be this way.

George_gk 01-31-2005 05:03 AM

Thanks a lot Mara, it is working now.


All times are GMT -5. The time now is 06:34 PM.