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

#define IN_BUFFER_SIZE 1000
#define OUT_BUFFER_SIZE 1000
#define TIME_OUT NMPWAIT_USE_DEFAULT_WAIT//600000

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

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

int main(void)
{
 char szPipeName[260]="\\\\.\\pipe\\pipeLab6";
 HANDLE hPipe;	
 BOOL fConnected;
 DWORD dwReadThreadId,dwWriteThreadId;
 HANDLE hReadThread,hWriteThread;
 char szAnswer[10]={0};
 //-------------------CreateNamedPipe---------------------------------
	hPipe=CreateNamedPipe(szPipeName,PIPE_ACCESS_DUPLEX,PIPE_TYPE_MESSAGE|PIPE_READMODE_MESSAGE|PIPE_WAIT,1,OUT_BUFFER_SIZE,IN_BUFFER_SIZE,TIME_OUT,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: CreateNamedPipe have returned INVALID_HANDLE_VALUE"<<endl;
	} 
	else
	{
//-------------------ConnectNamedPipe---------------------------------
		fConnected=ConnectNamedPipe(hPipe, NULL)?TRUE:(GetLastError() == ERROR_PIPE_CONNECTED);
		if(fConnected)
		{
			//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: ConnectNamedPipe have returned 0"<<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);
			DisconnectNamedPipe(hPipe);
		}
		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