Introduction
This snippet demonstrates one way of synchronizing multiple user worker threads by means of ManualResetEvent
s. I came across the question wherein you might have a number of computational threads and each thread has a number of computational stages. The constraint was that none of the threads can proceed to the next stage 'n+1' unless all threads completed stage 'n'.
Background
ThreadPool
is beneficial in cases when the threads are not highly CPU intensive and are not prioritized. By using the thread pool, you save valuable resources on the actual thread creation.
Using the Code
The project consists of three main objects:
- The GUI
frmSwitchBoard
- The synchronizing object
CPoolSynchronizer
- The object
CComputeItem
containing compute functions 'func
'
From the GUI, you can control how many compute threads you wish to place in the ThreadPool
.
You might also find it useful how to interact with WinForm controls asynchronously. CComputeItem
s update the progress independently from each other by calling Invoke()
on the control.
History
- 17th January, 2006 - Initial version submitted