If you are referring to the Win32 API CreateThread() function
, then you can use the fourth parameter lpParameter
to pass in arbitrary data into the thread as a pointer to void. This is a far more preferrable way than using global variables to pass data to a new thread.
Since you can only pass in a pointer to a single object, you have to group the data to a single struct if you need to pass in multiple variables. What you can do is create something like
ThreadCreationParameters *params = new ThreadCreationParameters;
// Populate contents of params here.
CreateThread(..., params, ...);
DWORD WINAPI MyThreadMain(LPVOID param)
ThreadCreationParameters *params = reinterpret_cast<ThreadCreationParameters *>(param);
// Now can access parameters with params->xxx
// Remember to delete params after we are done.
Note that it is important that you dynamically allocate the ThreadCreationParameters structure instead of placing it into the stack, since after exiting StartThread(), the stack would be cleared, and MyThreadMain would be accessing freed memory.
Also, remember that any variables you pass in ThreadCreationParameters by pointer or by reference need to be appropriately guarded with a synchronization primitive if both threads will be accessing the data.