Принудительное завершение потока в 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;
};

Ответы (0 шт):