#include <iostream>
#include <windows.h>
#include <conio.h>

using namespace std;

DWORD WINAPI watek(PVOID pvParam) // funkcja watku
{
  cout << "To jest nowy watek\n\n";
  return 0;
}

int main()
{
  DWORD ThreadID;
  HANDLE hThread = CreateThread(NULL, 0, watek, NULL, 0, &ThreadID);

  SuspendThread(hThread);      // wstrzymujemy watek
  // zalecany zabieg przed pobraniem lub ustawianiem informacji w watku
  // podczas wykonywania watkow wartosci rejestrow moga sie zmieniac


  CONTEXT context;               // deklarujemy strukture kontekstu
  context.ContextFlags = CONTEXT_INTEGER; // deklarujemy ze chcemy odczytac konteksty o wartosciach calkowitych
  // oprocz CONTEXT_INTEGER mamy jeszcze CONTEXT_DEBUG_REGISTERS
  // CONTEXT_SEGMENTS CONTEXT_FLOATING_POINT CONTEXT_CONTROL
  // i CONTEXT_EXTENDED_REGISTERS

  // KOD DLA ARCHITEKTURY x86 !!!

  GetThreadContext(hThread, &context);

  cout << "Eax:" << context.Eax << endl;      // odczytujemy wartosi ze struktury
  cout << "Ebx:" << context.Ebx << endl;
  cout << "Ecx:" << context.Ecx << endl;
  cout << "Edx:" << context.Edx << endl << endl;

  ResumeThread(hThread);    // wznawiamy dzialanie watku

  getch();

  return 0;
}
 