用VC++开发WinPopup的增强版
2010-07-15 20:44:15 来源:WEB开发网一、接收和发送消息
----WinPopupEx 的核心是消息的接收和发送,也就是对邮槽的处理。在程序开始运行时,它会调用函数:
HANDLE CreateMailslot(
LPCTSTR lpName, // 格式:
“.MailSlot 邮槽名”-本地邮槽
DWORD nMaxMessageSize,
// 最大的消息文本长度,帮助文档上说
----将该值设为0 则消息长度无限,实际上每次收发的消息长度不能超过424 字节
DWORD lReadTimeout, // 读超时时间(毫秒)
LPSECURITY_ATTRIBUTES
lpSecurityAttributes // Windows 95/98
的安全属性应设置为NULL
);
---- 建立两个本地邮槽WinPopup 和WPAnswer,邮槽.MailSlotWinPopup 用于接收消息正文,而邮槽.MailSlotWPAnswer 则是为了弥补邮槽机制传送消息的不可靠。当邮槽建立成功后,程序就在主线程之外新启动一个工作线程,这个线程不停地检查邮槽.MailSlotWinPopup,当邮槽不为空(有消息到达)时,它首先查看消息数据包中的发送方名字,如发送方名为B,则它向邮槽BMailSlotWPAnswer 发送一个极短的标志文本,以通知发送方自己已经收到它发来的消息,然后向主线程发送一条自定义消息,通知主线程有消息到达,主线程在该自定义消息处理函数中从邮槽.MailSlotWinPopup 里读出消息正文并将它显示给用户。如果计算机A 要向计算机B 发送消息,它只需将消息正文按一定格式的数据包写入邮槽BMailSlotWinPopup 中,然后在预定义的延迟时间后,检查本地邮槽.MailSlotWPAnswer 是否有计算机B 返回的应答标志文本,就可知道接收方是否已收到消息。
----检查邮槽中是否有消息到达使用函数:
BOOL GetMailslotInfo(
HANDLE hMailslot, // 邮槽句柄
LPDWORD lpMaxMessageSize,
// 指向存放最大消息长度的变量的指针
LPDWORD lpNextSize,
// 指向存放下一条消息长度的变量的指针
LPDWORD lpMessageCount,
// 指向存放消息条数的变量的指针
LPDWORD lpReadTimeout
// 读超时时间(毫秒)
);
----如果( *lpNextSize) != MAILSLOT_NO_MESSAGE,则说明有消息到达。
----从邮槽中读取消息同从文件中读取数据没有区别:
BOOL ReadFile(
HANDLE hFile, // 句柄(这里是邮槽)
LPVOID lpBuffer, // 接收数据的缓冲区指针
DWORD nNumberOfBytesToRead, // 要读取的字节数
LPDWORD lpNumberOfBytesRead,
// 指向存放已读取字节数的变量的指针
LPOVERLAPPED lpOverlapped
// 指向OVERLAPPD(重叠I/O) 结构的指针
);
更多精彩
赞助商链接