В чем отличие способов создание потоков?
Я не силен в си,так что не накидывайтесь на меня. Объясните в чем отличие способов создания потоков?
HANDLE mainThread = CreateThread(0, 0, &MainThread, 0, 0, 0);
или
thread swt(switcher);
swt.detach();
И почему я не могу в CreateThread указать любую void функцию?
Ответы (2 шт):
если коротко, то CreateThread это winapi функция в общем и целом к языку программирования не имеющая отношения, а std::thread - реализация многопоточной работы библиотекой С++.
Касаемо void функции, это требование api https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createthread
В качестве функции передается коллбэк заранее описанного вида
DWORD WINAPI ThreadProc(
_In_ LPVOID lpParameter
);
см. https://docs.microsoft.com/ru-ru/previous-versions/windows/desktop/legacy/ms686736(v=vs.85)
С++ thread на в конечном счете вызовет CreateThread. Это сделает C++ Runtime. Под Linux это будет pthread. То есть, в каждой OS различные функции C++ (потоки, обработка файлов и т. д.) переводятся в функции данной OS (native OS API).
Если пишете на C++, лучше использовать thread. Использование CreateThread сразу сделает невозможной компиляцию программы под другой операционкой.