When a thread is destroyed during the atexit() callback cleanup, it cannot
be joined and sits there doing nothing if the CRT is Visual Studio 2012 or
2013. Microsoft has stated that they would not be backporting the fix from
Visual Studio 2015. As a workaround we call ExitThread() forcibly after
the thread exits.