In a nutshell thread startup functions need to follow an exact prototype, and not the one you used.
They can accept a function that takes a single void *.
There are several solutions.
- Change your function to accept a void*. Right away cast it to a 'struct *' of some type you have created and has the data you want. You would typically create the struct in main with new/malloc, and then delete/free it when you don't need it in the thread function.
- The somewhat cleaner alternative is to 'new' up an object of a class you have made. Give that class a public static method that takes said void *. Use the static method as the thread starter, and pass the address of the object as 'this'. Then have the static cast the void * to the object type and call some 'start/run' routine on the object proper. Have the object delete itself before returning from the thread routine unless you have a more coordinated solution across the threads.