abachler, you claim the wrong problem and then accuse those who know better of being sheep.
CreateThread isn't broken. It does what it does perfectly well: it creates a new Win32 thread.
The problem isn't that it's broken, it's that it's unaware. The MS CRT needs some special handling at thread start and end, else it will leak memory. CreateThread is a pure Win32 function and does not - must not, even - handle this CRT stuff. That's why the MS CRT provides its own wrapper around CreateThread: _beginthreadex.
I have used Boost.Threads every now and then and can only say good things about it. I haven't used it since the last big interface change, though.