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.
- Software for developers
-
Delphi Components
.Net Components
Software for Android Developers
- More information resources
-
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
- Databases for Amazon shops developers
-
Amazon Categories Database
Browse Nodes Database