Po korekcie...
Sprawdzałem czy są jakieś różnice różnice w czasie działanie programu w zależności od sposobu tworzenia wątków.
W moim programie do wyszukiwania twarzy na zdjęciu używam wielowątkowości.
Środowisko testu: System Windows 10 64-bit, Kompilator Visual Studio Express 2015, kompilacja kodu C++ 64-bitowa.
Tworzę tam tablicę wątków i rozdzielam zadania po równo każdemu wątkowi.
Oto 2 sposoby tworzenia N wątków:
1. Przez CreateThread() z WinPI
HANDLE gTabThreadHandle[g_MaxLWatkow];
g_LUruchomionychWatkow = N;
for (i = 0; i < N - 1; ++i) //pętla od 0 do N-2
{ gTabNry[i] = i;
gTabThreadHandle[i] = CreateThread(NULL, 0, &FunWatek, (void *)&gTabNry[i], 0, &tid); //tworzę i od razu uruchamiam wątek
}
FunWatek(&gTabNry[N - 1]); //ostatni niby-wątek uruchamiam w głównym procesie
//Po utworzeniu wsz. wątków czekam na ich zakończenie
while (g_LUruchomionychWatkow > 0) Sleep(10);
2. Przez std::thread z C++11
std::thread gTabThread[gMaxDozwLWatkow];
g_LUruchomionychWatkow = N;
for (i = 0; i < N - 1; ++i) //pętla od 0 do N-2
{ gTabNry[i] = i;
gTabThread[i] = std::thread(FunWatek, (void *)&gTabNry[i]);
}
FunWatek(&gTabNry[N - 1]); //ostatni niby-wątek uruchamiany w procesie
//Po utworzeniu wsz. wątków czekam na ich zakończenie
for (i = 0; i < N - 1; ++i) gTabThread[i].join();
I taka tam funkcja wątkowa:
DWORD WINAPI FunWatek(void *Arg)
{ int NrWatka = *((int*)Arg); //nr wątka
ProceduraWatka(NrWatka);
g_LUruchomionychWatkow--; //reduce the count
return 0;
}
Otóż nie zauważyłem większych różnic w czasach działania programu między tymi dwoma sposobami tworzenia wątków.
Jednak użycie biblioteki #include <thread> dla std::thread zwiększyło 2 razy kod binarny programu (o 210 KB).
Natomiast użycie std::thread ułatwia pisanie aplikacji na różne systemy, tzw. portable code.