C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 159 - Подходы к созданию сервера MailSlot / Win 32 API / Win32 API

Шаг 159 - Подходы к созданию сервера MailSlot

В шаге "Шаг 155 - Создаем сервер почтового слота". Мы использовали MAILSLOT_WAIT_FOREVER для того, чтобы заблокировать операции чтения, но можно и использовать таймаут, в результате которого через указанное время блокировка сервера будет снята. Тогда придется постоянно обращаться к функции ReadFile для того, чтобы получить сообщения. Можно вот так:

#include "stdafx.h"
#include "windows.h"
#include "iostream.h"

void main()
{
	HANDLE hsl=NULL;
	hsl= CreateMailslot("\\\\.\\mailslot\\he",0,5,NULL);
	if (hsl!=INVALID_HANDLE_VALUE)
	{
		cout << "Ok Created mailslot" <<  endl;
		char buffer[255];
		DWORD nBytesRead;
		while (true)
		{
			if (ReadFile(hsl, &buffer, 255, &nBytesRead, NULL)!=0) 
			{
				cout <<  "Ok read" <<  endl;
				cout <<  buffer <<  endl;
				int i; 
				cin >> i;
				return;
			}
			cout << "time aut" << endl;
		}
	}
}

159_1.gif (5151 b)

Есть еще одна полезная функция которая может дать нам информацию, что в слоте что-то есть.

BOOL GetMailslotInfo
(
	HANDLE hMailslot,		// указатель на слот
	LPDWORD lpMaxMessageSize,	// максимальный размер
	LPDWORD lpNextSize,	// размер следующего
	LPDWORD lpMessageCount,	// количество сообщений
	LPDWORD lpReadTimeout	// тайм аут.
);

Можно и ее применить для того, чтобы обнаружить что-то в слоте.

#include "stdafx.h"
#include "windows.h"
#include "iostream.h"

void main()
{
	HANDLE hsl=NULL;
	hsl= CreateMailslot("\\\\.\\mailslot\\he",0,5,NULL);
	if (hsl!=INVALID_HANDLE_VALUE)
	{
		cout << "Ok Created mailslot" <<  endl;
		char buffer[255];
		DWORD nBytesRead;
		while (true)
		{
			DWORD dwmes=0;
			if (GetMailslotInfo(hsl,NULL,NULL,&dwmes,NULL)!=0)
			{
				if (dwmes>0)
				{
					if (ReadFile(hsl, &buffer, 255, &nBytesRead, NULL)!=0) 
					{
						cout <<  "Ok read" <<  endl;
						cout <<  buffer <<  endl;
						int i; 
						cin >> i;
						return;
					}
				}
			}
			cout << "time aut" << endl;
		}
	}
}

Эффект тот же, то ведь есть и функция SetMailslotInfo, которая может изменять тайм аут. Соответственно можно регулировать частоту опроса от максимума до минимума в зависимости от интенсивности трафика сообщений.


| |
Автор Каев Артем.
[AD]