Any type of producer/consumer problem can be neatly solved by using thread messages. Just passing the this pointer works only in cases where the worker thread just munges on some data from the class that it is passed and then it finishes. There are many problems where there are multiple threads that continue to stay on and act on e.g. messages/data being produced by some producer thread. Mostly these cases arise when the threads have to maintain states.