Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // lab5.cpp: определяет точку входа для консольного приложения.
- //
- #include "stdafx.h"
- #include <windows.h>
- #include <stdio.h>
- #include <string>
- #include <conio.h>
- #include <iostream>
- #define THREADCOUNT 4
- HANDLE hNextEvent;
- HANDLE ghThreads[THREADCOUNT];
- DWORD WINAPI ThreadProc(LPVOID);
- typedef struct MyData {
- int val1;
- } MYDATA, *PMYDATA;
- int _tmain(int argc, _TCHAR* argv [])
- {
- int i;
- DWORD dwThreadID;
- PMYDATA pDataArray[THREADCOUNT];
- printf("Thread MAIN >> STARTED\n");
- // создать объекты для синхронизации hNextEvent = CreateEvent(…);
- hNextEvent = CreateEvent(
- NULL, // default security attributes
- TRUE, // manual-reset event
- FALSE, // initial state is nonsignaled
- TEXT("NextEvent") // object name
- );
- if (hNextEvent == NULL)
- {
- printf("CreateEvent failed (%d)\n", GetLastError());
- return -1;
- }
- if (!SetEvent(hNextEvent))
- {
- printf("SetEvent failed (%d)\n", GetLastError());
- return -1;
- }
- for (i = 0; i < THREADCOUNT; i++)
- {
- // TODO: More complex scenarios may require use of a parameter
- // to the thread procedure, such as an event per thread to
- // be used for synchronization.
- pDataArray[i] = (PMYDATA) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
- sizeof(MYDATA));
- if (pDataArray[i] == NULL)
- {
- // If the array allocation fails, the system is out of memory
- // so there is no point in trying to print an error message.
- // Just terminate execution.
- ExitProcess(2);
- }
- // Generate unique data for each thread to work with.
- pDataArray[i]->val1 = i;
- ghThreads[i] = CreateThread(
- NULL, // default security
- 0, // default stack size
- ThreadProc, // name of the thread function
- pDataArray[i], // no thread parameters
- 0, // default startup flags
- &dwThreadID);
- if (ghThreads[i] == NULL)
- {
- printf("CreateThread failed (%d)\n", GetLastError());
- return -1;
- }
- }
- system("pause");
- return 0;
- }
- DWORD WINAPI ThreadProc(LPVOID lpParameter)
- {
- PMYDATA pDataArray;
- int iThreadId;
- char *str = "";
- pDataArray = (PMYDATA) lpParameter;
- iThreadId = pDataArray->val1;
- printf("Thread %d >> STARTED\n", iThreadId);
- while (true)
- {
- WaitForSingleObject(hNextEvent, INFINITE);
- while (true)
- {
- gets(str);
- if (str == "exit"){
- printf("Thread %d >> EXIT\n", iThreadId);
- if (!SetEvent(hNextEvent))
- {
- printf("Thread %d >> SetEvent FAILD (%d)\n", iThreadId, GetLastError());
- return -1;
- }
- return 0;
- }
- if (str == "next"){
- printf("Thread %d >> STOPED\n", iThreadId);
- break;
- }
- printf("Thread %d >> Your input is: /""%s/""\n", iThreadId, str);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment