Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
14
Добавлен:
01.05.2014
Размер:
2.8 Кб
Скачать
#include<windows.h>
#include<iostream.h>
#include<string.h>
#include<conio.h>


char szOutput[1000]="TEXT OF OUTPUT CLIENT";

void ReadThread(LPVOID lpvParam);
void WriteThread(LPVOID lpvParam);

int main(void)
{
 char szPipeName[260]="\\\\.\\pipe\\pipeLab6";
 HANDLE hPipe;
 DWORD dwReadThreadId,dwWriteThreadId;
 HANDLE hReadThread,hWriteThread;
 char szAnswer[10]={0};

	hPipe=CreateFile(szPipeName,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,NULL,OPEN_EXISTING,0,NULL);
	if(hPipe==INVALID_HANDLE_VALUE)
	{
		//FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),0,(LPTSTR) lpMsgBuf,0,NULL );
		//cout<<lpMsgBuf<<endl;
		cout<<"ERROR: CreateFile have returned INVALID_HANDLE_VALUE"<<endl;
	}
	else
	{
		hReadThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) ReadThread,(LPVOID) hPipe,0,&dwReadThreadId);      
		if (hReadThread == NULL) 
		{
			//FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),0,(LPTSTR) lpMsgBuf,0,NULL );
			//cout<<lpMsgBuf<<endl;
			cout<<"ERROR: CreateThread have returned NULL"<<endl;
		}
		hWriteThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) WriteThread,(LPVOID) hPipe,0,&dwWriteThreadId);      
		if (hWriteThread == NULL) 
		{
			//FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),0,(LPTSTR) lpMsgBuf,0,NULL );
			//cout<<lpMsgBuf<<endl;
			cout<<"ERROR: CreateThread have returned NULL"<<endl;
		}
		do
		{
			//system("cls");
			cout<<"Write EXIT to exit"<<endl;
			cin>>szAnswer;
		}
		while(strcmp(szAnswer,"EXIT"));
		TerminateProcess(hReadThread,1);
		TerminateProcess(hWriteThread,1);
		CloseHandle(hPipe);
	}
	getch();
}
//*******************************************************************************
void ReadThread(LPVOID lpvParam)
{
 HANDLE hPipe;
 char Buffer[2]={'a','\0'};
 DWORD dwReadSize;
	
	hPipe=(HANDLE)lpvParam;
	do
	{
		ReadFile(hPipe,(LPVOID)Buffer,1,&dwReadSize,NULL);
		if(dwReadSize==1)
			cout<<"Buffer";	
	}
	while(true);
}
//*******************************************************************************
void WriteThread(LPVOID lpvParam)
{
 int i=0;	
 HANDLE hPipe;
 char szMutexName[10]="MutexLab6";
 HANDLE hMutex;
 DWORD dwWriteSize;

	hPipe=(HANDLE)lpvParam;
	while(szOutput[i]!='\0')
	{
		hMutex=CreateMutex(NULL,true,szMutexName);
		WriteFile(hPipe,(LPVOID)&szOutput[i],1,&dwWriteSize,NULL);
		ReleaseMutex(hMutex);
		do
		{
			hMutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,szMutexName);
		}
		while(hMutex==NULL);
		WaitForSingleObject(hMutex,INFINITE);
		i++;
	}
	//ExitProcess(1);	
}
Соседние файлы в папке Лабораторная работа1