Многопоточность: поток или process.h - C ++ - PullRequest
3 голосов
/ 12 января 2020

Я начал изучать многопоточность. И я нашел 2 способа использовать его в i c C ++. Первый - thread

#include <thread>
...
std::thread t(function);
<< some code>> 
t.join(); //(or detach)

А второй - process

#include <process.h>
...
_beginthreadex('bunch of parameters');
<< some code >>
_endthreadex()

Так в чем же разница? И если есть разница, когда один должен использоваться вместо другого?

Ответы [ 2 ]

3 голосов
/ 12 января 2020

Придерживайтесь первого и стандартного способа в C ++ для создания потока, т. Е. Используя std :: thread.

Второй - спецификация Microsoft c. Я сомневаюсь, что кто-нибудь использовал бы это в настоящее время. Смотрите это: https://www.quora.com/When-do-we-write-include-process-h/answer/Sergey-Zubkov-1

2 голосов
/ 12 января 2020

Вы пропустили одно: 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>, вы не создаете проблем при переносе программы. Это просто работает.

...