I will assume here that you are using queue's of some sort to pass your instructions to the thread.
You might want to look into boost::thread for threading.
It is cross platform, commonly used, has similar syntax to the coming c++0x standard, etc..
They also have lots of useful constructs, one of which, condition variables, seems to be the perfect thing you need.
A condition variable pauses a thread till another thread calls notify on it.
Here is an example use of a condition variable
{
boost::scoped_lock lock(AMutexForAQueue); //locks a mutex
while (ASharedQueue.empty()) //We cannot do work while the queue is empty
{
cond.wait(); //wait
}
someData = ASharedQueue.pop();
}
//Do stuff with data here
While waiting the mutex will be released.
Here is how the code would look on the main thread side.
{
boost::scoped_lock lock(AMutexForAQueue); //locks a mutex
ASharedQueue.push(someTask); // push a task into the queue
}
cond.notify_one(); // start the thread
EDIT: This method would also allow you to easily add more threads, as the condition variable is guaranteed to only notify one at a time.