//---------------------------------------------------------------------------
#include<iostream>
#include<windows.h>

//---------------------------------------------------------------------------
using namespace std;

DWORD WINAPI FWatek1(PVOID pvParam)
{
   for (int i=0; i<50; i++)
        cout<<endl<<"dziala watek 1, wykonanie: "<<i+1<<endl;
    return 0;
}

DWORD WINAPI FWatek2(PVOID pvParam)
{
    for (int i=0; i<50; i++)
        cout<<endl<<"dziala watek 2, wykonanie: "<<i+1<<endl;
    return 0;
}

int main(int argc, char* argv[])
{
    // tworzymy uchwyt do aktualnie wykonujacego sie procesu
    HANDLE proces=GetCurrentProcess();
    // ustwiamy priorytet procesu
    SetPriorityClass(proces, ABOVE_NORMAL_PRIORITY_CLASS);

    DWORD watek1;
    // tworzymy watek
    HANDLE hWatek1=CreateThread(NULL, 0, FWatek1, NULL, 0, &watek1);

    // wstrzymujemy watek by wykonywac na nim operacje
    SuspendThread(hWatek1);
        SetThreadPriority(hWatek1,THREAD_PRIORITY_BELOW_NORMAL); // bedzie priorytet 10
    ResumeThread(hWatek1);  // wznawiamy watek 1

    DWORD watek2;
    HANDLE hWatek2=CreateThread(NULL, 0, FWatek2, NULL, 0, &watek2);

    SuspendThread(hWatek2);
        SetThreadPriority(hWatek2,THREAD_PRIORITY_HIGHEST); //priorytet 15

    HANDLE watek_glowny=GetCurrentThread();
    SetThreadPriority(watek_glowny, THREAD_PRIORITY_LOWEST);
    ResumeThread(hWatek2);  // dopiero teraz wznawiamy dzialanie drugiego watku

    for (int i=0; i<50; i++)
    {
        cout<<endl<<"Watek glowny, wykonanie: "<<i+1<<endl;
    }

    system("PAUSE");
    return 0;
}
//---------------------------------------------------------------------------
