// Events(lab9).cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include #include #include HANDLE Read, Write,COut; int count=0; UINT WINAPI ThreadWrite1(LPVOID Param); UINT WINAPI ThreadWrite2(LPVOID Param); UINT WINAPI ThreadRead(LPVOID Param); int _tmain(int argc, _TCHAR* argv[]) { HANDLE Thread1,Thread2,Thread3; HANDLE Event=CreateEvent(NULL,FALSE,TRUE,NULL); CreatePipe(&Read,&Write,NULL,0); COut=GetStdHandle(STD_OUTPUT_HANDLE); Thread1=(HANDLE)_beginthreadex(0,0,ThreadWrite1,Event,0,NULL); Thread2=(HANDLE)_beginthreadex(0,0,ThreadWrite2,Event,0,NULL); Thread3=(HANDLE)_beginthreadex(0,0,ThreadRead,Event,0,NULL); HANDLE Threads[]={Thread1, Thread2, Thread3}; WaitForMultipleObjects(3,Threads,TRUE,INFINITE); return 0; } UINT WINAPI ThreadWrite1(LPVOID Param) { srand(time(NULL)); HANDLE Event=(HANDLE)Param,Fwr; DWORD wait=1,num; TCHAR digit[10]={0},Info[32]={0}; int x=0; while (wait!=WAIT_OBJECT_0){ wait=WaitForSingleObject(Event,INFINITE); } x=rand()%100+1; WriteFile(Write,_itow(x,digit,10),sizeof(digit),&num,NULL); _stprintf(Info,L"\nWriter1 writed: %d\n",x); WriteConsole(COut,Info,_tcslen(Info),NULL,NULL); count++; SetEvent(Event); return 0; } UINT WINAPI ThreadWrite2(LPVOID Param) { srand(time(NULL)); HANDLE Event=(HANDLE)Param; DWORD wait=1,num; TCHAR digit[10]={0},Info[32]={0}; int x=0; while (wait!=WAIT_OBJECT_0){ wait=WaitForSingleObject(Event,INFINITE); } x=rand()%100-rand()%100; WriteFile(Write,_itow(x,digit,10),sizeof(digit),&num,NULL); _stprintf(Info,L"\nWriter2 writed: %d\n",x); WriteConsole(COut,Info,_tcslen(Info),NULL,NULL); count++; SetEvent(Event); return 0; } UINT WINAPI ThreadRead(LPVOID Param) { HANDLE Event=(HANDLE)Param; DWORD wait=1,num; TCHAR digit[10]={0},Info[64]={0}; int i,x=0; while (wait!=WAIT_OBJECT_0){ wait=WaitForSingleObject(Event,INFINITE); } while(count){ ReadFile(Read,digit,sizeof(digit),&num,NULL); x=_wtoi(digit);x*=10; _stprintf(Info,L"\nRecieved digit was multiplied on 10: %d\n",x); WriteConsole(COut,Info,_tcslen(Info),NULL,NULL); count--; } SetEvent(Event); return 0; }