Witam.
Znalazłem w sieci artykuł opisujący wątki w WINAPI. Wszystko fajnie, jednak przedstawiony tam poniższy kod:
#include <windows.h>
#include <conio.h>
#include <iostream>
using namespace std;
DWORD WINAPI watek_1(PVOID pvParam)
{
cout << "To jest watek nr 1!\n";
return 0;
}
DWORD WINAPI watek_2(PVOID pvParam)
{
cout << "To jest watek nr 2!\n";
return 0;
}
int main()
{
HANDLE proces = GetCurrentProcess();
SetPriorityClass(proces, ABOVE_NORMAL_PRIORITY_CLASS);
DWORD watek1;
HANDLE hWatek1 = CreateThread(NULL, 0, watek_1, NULL, 0, &watek1);
SuspendThread(hWatek1);
SetThreadPriority(hWatek1, THREAD_PRIORITY_BELOW_NORMAL); //
ResumeThread(hWatek1);
DWORD watek2;
HANDLE hWatek2 = CreateThread(NULL, 0, watek_2, NULL, 0, &watek2);
SuspendThread(hWatek2);
SetThreadPriority(hWatek2, THREAD_PRIORITY_TIME_CRITICAL); //
ResumeThread(hWatek2);
HANDLE watekGlowny = GetCurrentThread();
SetThreadPriority(watekGlowny, THREAD_PRIORITY_LOWEST);
cout << "To jest watek glowny\n";
system("PAUSE");
return 0;
}
zgodnie z tym co było wyjaśnione i zgodnie z moim zrozumieniem tematu powinien wykonać się w następującej kolejności:
watek2, watek1, watekglowny, jednak zachowanie programu jest nie determistyczne i wątki wykonują się w kolejności randomowej, kto pierwszy, ten lepszy ;)
Tak więc moje pytanie brzmi dlaczego priorytety wątków podane w SetThreadPrioryty() nie zmieniają kolejności wykonywania się wątków na 2, 1, główny.
Z góry dziękuję za pomoc.