Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Windows Threading Wait Method

I'm creating a thread class to encapsulate 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 it's 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.

like image 379
Sam Cogan Avatar asked May 01 '09 14:05

Sam Cogan


People also ask

What is Manualreseteventslim?

Represents a thread synchronization event that, when signaled, must be reset manually. This class is a lightweight alternative to ManualResetEvent.

When a monitor wait is called the thread goes into what state?

6 Answers. Show activity on this post. A thread goes to wait state once it calls wait() on an Object. This is called Waiting State.

What is wait in monitor?

Wait(Object, Int32, Boolean) Releases the lock on an object and blocks the current thread until it reacquires the lock. If the specified time-out interval elapses, the thread enters the ready queue.


1 Answers

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.

like image 160
Brian R. Bondy Avatar answered Sep 22 '22 08:09

Brian R. Bondy