» idle/ready/busy
Windows has no concept of this. I guess you could define "idle" to mean "has no messages in the thread queue", but you can't read another thread's message queue.
You could try using hooks, and tracking when the last time a thread has processed a message. That would provide a fairly good implementation of "idle/busy" for User-Interface threads.
Because worker threads do not usually process messages, you should have the process signal a named event or something when it's busy, so that you can test with WaitForSingleObject with a timeout of zero.
I REALLY hope this helps.
Will