Вы пропустили одно: CreateThread () , которое также является спецификацией Microsoft (WinAPI) c и встречается во многих Windows программах.
что, если что-нибудь , разница?
_beginthreadex
и CreateThread
являются нестандартными функциями Microsoft / Windows Speci c.
_beginthread
имеет поддержку запуска поток в Управляемый код , который может быть полезен в смешанной среде.
CreateThread
- это собственный вызов WinAPI для создания потока. Это звонок , который вы найдете в программах classi c Windows. Дескриптор потока, возвращаемый этим вызовом, дает вам возможность управлять потоком различными способами, например, вызывая SetThreadPriority () et c.
Использование <thread>
является , начиная с C ++ 11, стандартный способ сделать многопоточность. Он имеет большую часть того, что вам когда-либо понадобится, но в нем отсутствует некоторая поддержка платформы c для работы с потоками. Тем не менее, поток, созданный стандартной библиотекой, может возвращать собственный дескриптор потока для включения приоритетов и т. Д. c. используя платформу с указанием c вызовов с этим дескриптором.
, если есть разница, когда следует использовать один вместо другого?
Поскольку вы изучаете потоки и не копаетесь в старом коде, вам определенно следует go с <thread>
. Вероятно, пройдет очень много времени, прежде чем вы почувствуете необходимость использовать собственные вызовы, чтобы поиграть с потоками в указанном платформе способом c - и если вы это сделаете, вы все равно сможете получить собственный дескриптор.
Использование <thread>
также делает ваши программы переносимыми. В среде Posix многопоточность обычно выполняется потоками Posix (с совершенно другим API, чем API Windows), но, создавая код, использующий чистые вызовы <thread>
, вы не создаете проблем при переносе программы. Это просто работает.