After the WaitForSingleObject() call, you can get the value "returned" by the thread by using
GetExitCodeThread()[
^]
Additional Info: I see that you also asked about sending parameters to the thread. The easiest method is to pass a single parameter that is a pointer to a structure (struct) that contains the multiple pieces of data you want to send. You already have the basic form for doing that in the code you posted.
Also, looking at your example, I see that you simply create the thread and then wait for it to finish before proceeding. I hope this is just the example for your learning as it is really a bad use of threads. If all you do is create the thread and immediately wait for it to terminate, you are getting no benefit from threads at all as you are serializing the execution of the code. So you have all the overhead of creating the argument list and figuring out how to get the return value and no benefits over a simple direct call to a function.