#include "stdafx.h" #include #include #include #include #include using namespace std; #define watki 4 DWORD dword; int zmienna = 0; VOID FunkcjaBezparametrowa(VOID) { LPVOID lpvoid; lpvoid = TlsGetValue(dword); int licznik = reinterpret_cast(lpvoid); licznik++; TlsSetValue(dword, reinterpret_cast(licznik)); lpvoid = TlsGetValue(dword); cout << "Funkcja bezparametrowa watek " << GetCurrentThreadId() << " : licznik = " << lpvoid << endl; Sleep(100); } DWORD WINAPI ThreadFunc(VOID) { LPVOID lpvoid; lpvoid = (LPVOID)LocalAlloc(LPTR, 256); int licznik = zmienna++; TlsSetValue(dword, reinterpret_cast(licznik)); lpvoid = TlsGetValue(dword); cout << "Watek " << GetCurrentThreadId() << " : licznik startowy = " << lpvoid << endl; for (int i = 0; i < 30; i++) FunkcjaBezparametrowa(); lpvoid = TlsGetValue(dword); cout << "Watek " << GetCurrentThreadId() << " : licznik koncowy =" << lpvoid << endl; LocalFree((HLOCAL)lpvoid); return 0; } int main(VOID) { DWORD IDThread; HANDLE hThread[watki]; int i; dword = TlsAlloc(); for (i = 0; i < watki; i++) { hThread[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunc, NULL, 0, &IDThread); } for (i = 0; i < watki; i++) WaitForSingleObject(hThread[i], INFINITE); TlsFree(dword); cin.ignore(); return 0; }