Facebook
From zd9, 7 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 296
  1. #include "stdafx.h"
  2. #include <omp.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <iostream>
  6. #include <windows.h>
  7. using namespace std;
  8.  
  9. #define watki 4    
  10. DWORD dword;
  11. int zmienna = 0;
  12.  
  13. VOID FunkcjaBezparametrowa(VOID)
  14. {
  15.         LPVOID lpvoid;
  16.  
  17.         lpvoid = TlsGetValue(dword);
  18.         int licznik = reinterpret_cast<int>(lpvoid);
  19.         licznik++;
  20.         TlsSetValue(dword, reinterpret_cast<LPVOID>(licznik));
  21.         lpvoid = TlsGetValue(dword);
  22.         cout << "Funkcja bezparametrowa watek " << GetCurrentThreadId() << " : licznik = " << lpvoid << endl;
  23.         Sleep(100);
  24. }
  25.  
  26. DWORD WINAPI ThreadFunc(VOID)
  27. {
  28.         LPVOID lpvoid;
  29.  
  30.         lpvoid = (LPVOID)LocalAlloc(LPTR, 256);
  31.  
  32.         int licznik = zmienna++;
  33.         TlsSetValue(dword, reinterpret_cast<LPVOID>(licznik));
  34.         lpvoid = TlsGetValue(dword);
  35.  
  36.         cout << "Watek " << GetCurrentThreadId() << " : licznik startowy = " << lpvoid << endl;
  37.  
  38.         for (int i = 0; i < 30; i++) FunkcjaBezparametrowa();
  39.         lpvoid = TlsGetValue(dword);
  40.         cout << "Watek " << GetCurrentThreadId() << " : licznik koncowy =" << lpvoid << endl;
  41.         LocalFree((HLOCAL)lpvoid);
  42.         return 0;
  43. }
  44. int main(VOID)
  45. {
  46.         DWORD IDThread;
  47.         HANDLE hThread[watki];
  48.         int i;
  49.  
  50.  
  51.         dword = TlsAlloc();
  52.  
  53.         for (i = 0; i < watki; i++)
  54.         {
  55.                 hThread[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunc, NULL, 0, &IDThread);
  56.         }
  57.  
  58.         for (i = 0; i < watki; i++)
  59.                 WaitForSingleObject(hThread[i], INFINITE);
  60.  
  61.         TlsFree(dword);
  62.         cin.ignore();
  63.  
  64.         return 0;
  65.  
  66. }