C-runtime имеет множество переменных с состоянием, которые хранят такие вещи, как текущая локаль.Эти значения должны быть установлены для каждого потока, в противном случае код в отдельном потоке (например, вызов setlocale) может чрезмерно повлиять на код, выполняющийся в другом потоке.
_beginthread оборачивает ваш поток в код, который выполняет необходимое распределение и освобождение этихструктуры данных потоков.
Если вы вызываете CreateThread напрямую, структуры, вероятно, будут выделяться по мере необходимости, но без оболочки, среда выполнения никогда не будет знать, когда завершится поток, и они будут утечки.