Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // l2.cpp: определяет точку входа для консольного приложения.
- //
- #include "stdafx.h"
- #include <windows.h>
- #include <winspool.h>
- using namespace std;
- typedef struct
- {
- int Number;
- int Task;
- /* всё, что душе угодно */
- } StructToThread;
- DWORD dwCounter = 0;
- DWORD WINAPI ThreadProcSum(CONST LPVOID lpParam)
- {
- DWORD i;
- DWORD dwTemp;
- int PAUSE = 1000;
- TCHAR MessageBegin[256], MessageEnd[256];
- const int* Num = (const int*)lpParam;
- wsprintf(MessageBegin, TEXT("Thread number %d begin with sum\n"), Num);
- wsprintf(MessageEnd, TEXT("Thread number %d end with sum\n"), Num);
- PAUSE = 2500;
- CONST HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
- WriteConsole(hStdOut, MessageBegin, lstrlen(MessageBegin), &dwTemp, NULL);
- dwCounter++;
- Sleep(PAUSE);
- WriteConsole(hStdOut, MessageEnd, lstrlen(MessageEnd), &dwTemp, NULL);
- ExitThread(0);
- }
- DWORD WINAPI ThreadProcMul(CONST LPVOID lpParam)
- {
- DWORD i;
- DWORD dwTemp;
- int PAUSE = 1000;
- TCHAR MessageBegin[256], MessageEnd[256];
- const int* Num = (const int*)lpParam;
- wsprintf(MessageBegin, TEXT("Thread number %d begin with mul\n"), Num);
- wsprintf(MessageEnd, TEXT("Thread number %d end with mul\n"), Num);
- PAUSE = 5500;
- CONST HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
- WriteConsole(hStdOut, MessageBegin, lstrlen(MessageBegin), &dwTemp, NULL);
- dwCounter++;
- Sleep(PAUSE);
- WriteConsole(hStdOut, MessageEnd, lstrlen(MessageEnd), &dwTemp, NULL);
- ExitThread(0);
- }
- VOID Error(CONST HANDLE hStdOut, CONST LPCWSTR szMessage)
- {
- DWORD dwTemp;
- TCHAR szError[256];
- WriteConsole(hStdOut, szMessage, lstrlen(szMessage), &dwTemp, NULL);
- wsprintf(szError, TEXT("LastError = %d\r\n"), GetLastError());
- WriteConsole(hStdOut, szError, lstrlen(szError), &dwTemp, NULL);
- ExitProcess(0);
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- TCHAR szMessage[256];
- printf("Input count of thread: ");
- int THREADS_NUMBER, i, temp, COUNT_TASKS,TASKS_NOW,COUNT_THREAD_NOW;
- int SetNum[100],ThreadWork[100];
- DWORD dwTemp=0, Num[2];
- scanf_s("%d", &THREADS_NUMBER);
- printf("Input tasks 1-sum,2-mul,3-exit: \n");
- i = 0;
- do
- {
- scanf_s("%d", &temp);
- SetNum[i] = temp;
- i++;
- } while (temp != 3);
- COUNT_TASKS = i - 1;
- printf("OK0\n");
- CONST HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
- HANDLE hThreads[100];
- /*for (i = 0; i < THREADS_NUMBER; i++)
- {
- ThreadWork[i] = 0;
- }
- TASKS_NOW = 0;
- i = 0;
- COUNT_THREAD_NOW = 0;
- while (TASKS_NOW < COUNT_TASKS)
- {
- while ((THREADS_NUMBER > i) && (TASKS_NOW < COUNT_TASKS))
- {
- switch (SetNum[TASKS_NOW])
- {
- case 1:
- hThreads[i] = CreateThread(NULL, 0, &ThreadProcSum, (LPVOID)(i + 1), 0, NULL);
- break;
- case 2:
- hThreads[i] = CreateThread(NULL, 0, &ThreadProcMul, (LPVOID)(i + 1), 0, NULL);
- break;
- default:
- break;
- }
- i++;
- ThreadWork[i] = 1;
- }
- }
- */
- for (i = 0; i < THREADS_NUMBER; i++)
- {
- switch (SetNum[i])
- {
- case 1:
- hThreads[i] = CreateThread(NULL, 0, &ThreadProcSum, (LPVOID)(i+1), 0, NULL);
- break;
- case 2:
- hThreads[i] = CreateThread(NULL, 0, &ThreadProcMul, (LPVOID)(i+1), 0, NULL);
- break;
- default:
- break;
- }
- if (NULL == hThreads[i])
- {
- Error(hStdOut, TEXT("Failed to create thread.\r\n"));
- }
- }
- WaitForMultipleObjects(THREADS_NUMBER, hThreads, TRUE, INFINITE);
- printf("OK2\n");
- wsprintf(szMessage, TEXT("Counter = %d\r\n"), dwCounter);
- WriteConsole(hStdOut, szMessage, lstrlen(szMessage), &dwTemp, NULL);
- for (i = 0; i < THREADS_NUMBER; i++)
- {
- CloseHandle(hThreads[i]);
- }
- ///////////////
- printf("End. ");
- scanf_s("%d", &THREADS_NUMBER);
- getchar();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement