Функцию потока следует проектировать так, чтобы поток завершался только после того, как она возвращает управление. Это единственный способ, гарантирующий кор ректную очистку всех ресурсов, принадлежавших Вашему потоку. При этом:
любые С++-объекты, созданные данным потоком, уничтожаются соответствующими деструкторами;
система корректно освобождает память, которую занимал стек потока;
система устанавливает код завершения данного потока (поддерживаемый объектом ядра "поток") — его и возвращает Ваша функция потока;
счетчик пользователей данного объекта ядра "поток" уменьшается на 1.