Cześć!
Napisałem sobie program, który:
Tworzy jakieś cztery wątki, przekazuje im po jednym argumencie (jakaś zmienna globalna) i po przeliczeniu do określonej liczby inkrementuje zmienną. W mainie wartości n1-n4 są wypisywane. Wszędzie są pętle nieskończone, poza mainem gdzie jest if(_kbhit()){3x getch, 'a' zawiesza wątki, 'z' wznawia a 'esc' kończy program}.
Chciałem zmienić priorytety wątków, tak żeby jeden był wysoki, a reszta niskie. Wtedy przecież powinno wykonywać program wątku o najwyższym priorytecie dopóki się on nie skończy? Więc powinno mi zwiększać tylko jedną zmienną, a cały czas idzie w takim samym tempie wszystko. [Kod dam niżej].
Pytanie 1: Myślałem, żeby stworzyć główny wątek przez CreateProcess i żeby to odpalało konsolę w której byłyby wyświetlane te zmienne. Chcąc żeby tamten wątek (główny) się konczył na klawisz esc (analogicznie jak wyżej, tylko zamiast w main'ie programu zrobić to w głównym wątku) to co trzeba zrobić? Stworzyć nowy typ wątku i tam to wszystko wrzucić?
Pytanie 2: Czy można przekazać większą ilość parametru do wątku? Np. numer wątku jako liczbę porządkową i zmienną do inkrementacji?
HANDLE hw_1 = CreateThread(0, 0, watek, &n1, 0, 0);
SetThreadPriority(hw_1, THREAD_PRIORITY_TIME_CRITICAL);
HANDLE hw_2 = CreateThread(0, 0, watek, &n2, 0, 0);
SetThreadPriority(hw_2, THREAD_PRIORITY_IDLE);
HANDLE hw_3 = CreateThread(0, 0, watek, &n3, 0, 0);
SetThreadPriority(hw_3, THREAD_PRIORITY_IDLE);
HANDLE hw_4 = CreateThread(0, 0, watek, &n4, 0, 0);
SetThreadPriority(hw_4, THREAD_PRIORITY_IDLE);
while (1) {
if (_kbhit()) {
char c = _getch();
if (c == 'a') {
SuspendThread(hw_1);
SuspendThread(hw_2);
SuspendThread(hw_3);
SuspendThread(hw_4);
}
else if (c == 'z') {
ResumeThread(hw_1);
ResumeThread(hw_2);
ResumeThread(hw_3);
ResumeThread(hw_4);
}
else if (c == 27)
break;
}
Sleep(500);
printf("n1: %d\nn2: %d\nn3: %d\nn4: %d\n\n", n1, n2, n3, n4);
}
TerminateThread(hw_1, 0);
TerminateThread(hw_2, 0);
TerminateThread(hw_3, 0);
TerminateThread(hw_4, 0);
CloseHandle(hw_1);
CloseHandle(hw_2);
CloseHandle(hw_3);
CloseHandle(hw_4);
HANDLE handle;
handle = OpenProcess(PROCESS_ALL_ACCESS, 0, GetCurrentProcessId());
TerminateProcess(handle, 0);