Наиболее распространенным способом является создание класса Thread, который имеет метод run () и метод start () (эти имена заимствованы из класса Java Thread).run () - это чистый виртуальный объект, который вы перегружаете в классе, производном от Thread, для выполнения реальной работы.Метод start () внутренне вызывает CreateThread, передавая указатель this через reinterpret_cast в void *.Класс Thread также имеет статическую функцию threadEntryPoint (), которую вы передаете CreateThread.В threadEntryPoint () вы делаете reinterpret_cast обратно в Thread * и затем вызываете run () для него.
Если есть одна ситуация, в которой вы просто хотите, чтобы метод другого класса выполнялся в отдельном потоке (безнаследуя от класса Thread), вы можете создать производный от Thread класс, который получает пару указателей на объект + метод в конструкторе и вызывает их в run ().Чтобы упростить задачу, сделайте этот производный класс шаблоном.Также обратите внимание на повышение для функторных адаптеров.