views:

203

answers:

1

I'm creating a thread class to encapsulat the windows thread methods. I'm trying to create a method that makes the application wait for the thread to complete before it exits the application. If I use a while loop and boolean flag, it works but obviously it spikes my CPU use and its just not ideal.

What ways would you use to wait for the completion of a thread? (i'm not really looking for code here, just areas to look into)

+7  A: 

After you use CreateThread to get a thread handle, pass it into the Win32 API WaitForSingleObject:

WaitForSingleObject(threadhandle, INFINITE);

If you do not use CreateThread (because you use another threading package), or perhaps your thread is always alive...

Then you can still use WaitForSingleObject. Just create an event first with the Win32 API CreateEvent, and wait for the event to be set with WaitForSingleObject. At the end of your thread set the event with SetEvent and you can reset the event with ResetEvent.

Most threading packages though will have their own way to wait for a thread. Like in boost::thread you can use .join() or a boost::condition.

Brian R. Bondy
Only problem is I am wanting to re-use this thread, so when the unit of work (a functor) has completed the thread is suspended, so WaitForSingleObject runs indefinately
Sam Cogan
Ok, then you can use the event method I mentioned instead.
Brian R. Bondy
Ok, thanks, will look into that.
Sam Cogan
OK I gave a little more info on it to via editing my answer.
Brian R. Bondy