Принудительное завершение потока в WinApi
Нужно принудительно завершить поток с наименьшим приоритетом, написал вот так:
int min = 10;
for (int i = 0; i < 5; i++)
{
if (GetThreadPriority(threads[i]) < min)
min = i;
}
TerminateThread(threads[min], 0);
Но при запуске принудительное завершение потока не происходит, в чём может быть проблема?
#include <windows.h>
#include <stdio.h>
#define N 5
int massiv[N];
DWORD thread_id[N];
HANDLE threads[N];
DWORD WINAPI func(void* data);
int main(int* argc, char** argv)
{
int buffer[N];
for (int i = 0; i < N; i++)
{
buffer[i] = i;
}
threads[0] = CreateThread(NULL, 0, &func, &buffer[0], THREAD_PRIORITY_NORMAL, &thread_id[0]);
Sleep(100);
threads[1] = CreateThread(NULL, 0, &func, &buffer[1], THREAD_PRIORITY_NORMAL, &thread_id[1]);
Sleep(100);
threads[2] = CreateThread(NULL, 0, &func, &buffer[2], THREAD_PRIORITY_NORMAL, &thread_id[2]);
Sleep(100);
threads[3] = CreateThread(NULL, 0, &func, &buffer[3], THREAD_PRIORITY_NORMAL, &thread_id[3]);
Sleep(100);
threads[4] = CreateThread(NULL, 0, &func, &buffer[4], THREAD_PRIORITY_NORMAL, &thread_id[4]);
Sleep(100);
WaitForMultipleObjects(N, threads, TRUE, INFINITE);
printf("\n\n\n");
Sleep(100);
for (int i = 0; i < 5; i++)
{
printf("NEW:Thread Serial Number = % d Thread Priority = %d \n", i, GetThreadPriority(threads[i]));
}
for (int i = 0; i < N; i++)
{
CloseHandle(threads[i]);
}
return 0;
};
DWORD WINAPI func(void* data)
{
int* F = (int*)data;
switch (*F)
{
case 0:
SetThreadPriority(threads[*F], THREAD_PRIORITY_NORMAL);
printf("Thread Serial Number = % d Thread Priority = %d \n", *F, GetThreadPriority(threads[*F]));
Sleep(100);
break;
case 1:
SetThreadPriority(threads[*F], THREAD_PRIORITY_ABOVE_NORMAL);
printf("Thread Serial Number = % d Thread Priority = %d \n", *F, GetThreadPriority(threads[*F]));
Sleep(100);
break;
case 2:
SetThreadPriority(threads[*F], THREAD_PRIORITY_ABOVE_NORMAL);
printf("Thread Serial Number = % d Thread Priority = %d \n", *F, GetThreadPriority(threads[*F]));
Sleep(100);
break;
case 3:
SetThreadPriority(threads[*F], THREAD_PRIORITY_ABOVE_NORMAL);
printf("Thread Serial Number = % d Thread Priority = %d \n", *F, GetThreadPriority(threads[*F]));
Sleep(100);
break;
case 4:
SetThreadPriority(threads[*F], THREAD_PRIORITY_BELOW_NORMAL);
printf("Thread Serial Number = % d Thread Priority = %d \n", *F, GetThreadPriority(threads[*F]));
Sleep(100);
break;
default:
break;
}
if (*F == 0)
{
SetThreadPriority(threads[*F], GetThreadPriority(threads[*F]) + 2);
Sleep(100);
}
if (*F == 2)
{
SetThreadPriority(threads[*F], GetThreadPriority(threads[*F]) - 1);
}
int min = 10;
for (int i = 0; i < 5; i++)
{
if (GetThreadPriority(threads[i]) < min)
min = i;
}
TerminateThread(threads[min], 0);
return 0;
};
