Is there a way to tell if a thread has exited normally or because of an exception?
You could set some global variable to 0 if success, or non-zero if there was an exception. This is a pretty standard convention.
However, you'll need to protect this variable with a mutex or semaphore. Or you could make sure that only one thread will ever write to it and all others would just read it.