Advertisement
Guest User

Untitled

a guest
Jun 24th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.20 KB | None | 0 0
  1. #include <windows.h>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5. int N_value;
  6. long sum = 0;
  7. DWORD WINAPI ThreadFunc(LPVOID lpParameter);
  8. CRITICAL_SECTION cs;
  9.  
  10. struct CalcParam
  11. {
  12.     int ThreadId;
  13.     int Start;
  14.     int Count;
  15.     CalcParam(int id, int s, int c)
  16.     {
  17.         ThreadId = id;
  18.         Start = s;
  19.         Count = c;
  20.     }
  21. };
  22.  
  23. void main()
  24. {
  25.     cout << "Please, input N:" << endl;
  26.     //cin >> N_value;
  27.     N_value = 10000;
  28.     InitializeCriticalSection(&cs);
  29.     LPDWORD threadOne = 0,
  30.             threadTwo = 0;
  31.  
  32.     //int ThreadId1 = 1;
  33.     CalcParam p1(1, 0, N_value / 2);
  34.     CalcParam p2(2, N_value / 2, N_value / 2);
  35.  
  36.     CreateThread(NULL, 0, &ThreadFunc, &p1, 0, threadOne);
  37.     CreateThread(NULL, 0, &ThreadFunc, &p2, 0, threadTwo);
  38.  
  39.     cin >> N_value;
  40.     DeleteCriticalSection(&cs);
  41. }
  42.     //long sum1 = 0, sum2 = 0;
  43. DWORD WINAPI ThreadFunc(LPVOID lpParameter)
  44. {
  45.     CalcParam cp = *(CalcParam*)((void*)lpParameter);
  46.     //int threadId = *(int*)((void*)lpParameter);
  47.  
  48.     for(int i = 0; i < cp.Count; i++)
  49.     {
  50.         EnterCriticalSection(&cs);
  51.         sum += cp.Start + i;
  52.         printf("Thread %i, sum is %ld\n", cp.ThreadId, sum);
  53.         //cout << "Thread " << cp.ThreadId << " sum is " << sum << endl;
  54.        
  55.         LeaveCriticalSection(&cs);
  56.         Sleep(2);
  57.     }
  58.     return 1;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement