На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Reading from a Mailslot



The process that creates a mailslot can read messages from it by using the mailslot handle in a call to the ReadFile function. The code in the following example calls the GetMailslotInfo function to determine whether there are messages in the mailslot. If messages are waiting, each is displayed in a message box along with the number of messages remaining to be read.

BOOL FAR PASCAL Readslot(HWND hwnd, HDC hdc)
{
DWORD cbMessage, cMessage, cbRead;
BOOL fResult;
LPSTR lpszBuffer;
CHAR achID[80];
DWORD cAllMessages;

cbMessage = cMessage = cbRead = 0;

/* Mailslot handle "hSlot1" is declared globally. */

fResult = GetMailslotInfo(hSlot1, /* mailslot handle */
(LPDWORD) NULL, /* no maximum message size */
&cbMessage, /* size of next message */

&cMessage, /* number of messages */
(LPDWORD) NULL); /* no read time-out */

if (!fResult) {
ErrorHandler(hwnd, "GetMailslotInfo");
return FALSE;
}

if (cbMessage == MAILSLOT_NO_MESSAGE) {
TextOut(hdc, 10, 10, "No waiting messages.", 20);
return TRUE;
}

cAllMessages = cMessage;

while (cMessage != 0) { /* retrieves each message */


/* Create a message-number string. */

wsprintf((LPSTR) achID,
"\nMessage #%d of %d\n", cAllMessages - cMessage + 1,
cAllMessages);

/* Allocate memory for the message. */

lpszBuffer = (LPSTR) GlobalAlloc(GPTR,
lstrlen((LPSTR) achID) + cbMessage);

lpszBuffer[0] = '\0';

fResult = ReadFile(hSlot1,
lpszBuffer,
cbMessage,
&cbRead,

(LPOVERLAPPED) NULL);

if (!fResult) {
ErrorHandler(hwnd, "ReadFile");
GlobalFree((HGLOBAL) lpszBuffer);
return FALSE;
}

/* Concatenate the message and the message-number string. */

lstrcat(lpszBuffer, (LPSTR) achID);

/* Display the message. */

MessageBox(hwnd,
lpszBuffer,
"Contents of Mailslot",
MB_OK);


GlobalFree((HGLOBAL) lpszBuffer);

fResult = GetMailslotInfo(hSlot1, /* mailslot handle */
(LPDWORD) NULL, /* no maximum message size */
&cbMessage, /* size of next message */
&cMessage, /* number of messages */
(LPDWORD) NULL); /* no read time-out */

if (!fResult) {
ErrorHandler(hwnd, "GetMailslotInfo");

return FALSE;
}
}
return TRUE;
}


A mailslot exists until the CloseHandle function is called for all open server handles or until all server processes that own a mailslot handle exit. In both cases, any unread messages are deleted from the mailslot, all client handles to the mailslot are closed, and the mailslot itself is deleted from memory.


Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Чтение из Mailslot



Процесс, который создает mailslot мочь прочитать сообщения из этого используя ручку mailslot на вызове в функцию ReadFile. Код в следующем примере вызывает функцию GetMailslotInfo, чтобы определять есть ли сообщения в mailslot. Если сообщения ожидаются, каждый отображен в ящике сообщения вместе с количеством сообщений, остающихся в прочитан.

BOOL ЗНАЧИТЕЛЬНО PASCAL Readslot(HWND hwnd, HDC hdc)
{
cbMessage DWORD, cMessage, cbRead;
BOOL fResult;
LPSTR lpszBuffer;
СИМВОЛ achID[80];
DWORD cAllMessages;

cbMessage = cMessage = cbRead = 0;

/* Ручка Mailslot "hSlot1" объявлена globally. */

fResult = GetMailslotInfo(hSlot1, /* mailslot Ручка */ (LPDWORD) НЕДЕЙСТВИТЕЛЬНЫЙ, /* никакой максимальный размер сообщения */ &cbMessage, /* размер следующего сообщения */

&cMessage, /* Количество сообщений */ (LPDWORD) НЕДЕЙСТВИТЕЛЬНЫЙ); /* никакая задержка чтения */

если (!fResult) {
ErrorHandler(hwnd, "GetMailslotInfo");
обратная ЛОЖЬ;
}

если (cbMessage == MAILSLOT_NO_MESSAGE) { TextOut(hdc, 10, 10, "No ожидая сообщения.", 20);
возвращайтесь ВЕРНО;
}

cAllMessages = cMessage;

пока (cMessage != 0) { /* извлекает каждое сообщение */


/* Создайте сообщение-число string. */

wsprintf((LPSTR) achID, "\nMessage #%d %d\n", cAllMessages - cMessage + 1, cAllMessages);

/* Распределите память для message. */

lpszBuffer = (LPSTR) GlobalAlloc(GPTR, lstrlen((LPSTR) achID) + cbMessage);

lpszBuffer[0] = '\0;

fResult = ReadFile(hSlot1, lpszBuffer, cbMessage, &cbRead,

(LPOVERLAPPED) НЕДЕЙСТВИТЕЛЬНЫЙ);

если (!fResult) { ErrorHandler(hwnd, "ReadFile");
GlobalFree((HGLOBAL) lpszBuffer);
обратная ЛОЖЬ;
}

/* Конкатенируйте сообщение и сообщение-число string. */

lstrcat(lpszBuffer, (LPSTR) achID);

/* Отобразите message. */

MessageBox(hwnd, lpszBuffer, "СОДЕРЖАНИЕ Mailslot", MB_OK);


GlobalFree((HGLOBAL) lpszBuffer);

fResult = GetMailslotInfo(hSlot1, /* mailslot Ручка */ (LPDWORD) НЕДЕЙСТВИТЕЛЬНЫЙ, /* никакой максимальный размер сообщения */ &cbMessage, /* размер следующего сообщения */ &cMessage, /* количество сообщений */ (LPDWORD) НЕДЕЙСТВИТЕЛЬНЫЙ); /* никакая задержка чтения */

если (!fResult) {
ErrorHandler(hwnd, "GetMailslotInfo");

обратная ЛОЖЬ;
}
}
возвращайтесь ВЕРНО;
}


mailslot Существует пока функция CloseHandle не будет вызвана ко всем открытым ручкам сервера или пока весь сервер не обработает, что обладает выходом ручки mailslot. В обоих случаях, любые unread сообщения удалены из mailslot, весь клиент оперируется на mailslot закрыты, и сам mailslot удален из памяти.


Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz