2,586
社区成员
发帖
与我相关
我的任务
分享
///////////
//.h
#ifndef _MESSAGER_H_
#define _MESSAGER_H_
#include <windows.h>
class TMsgSender
{
/* */
public:
TMsgSender(HWND Owner, UINT uMessage);
~TMsgSender(void);
BOOL SendTo(TCHAR *Source, TCHAR *Target, TCHAR *Message);
/* */
protected:
HANDLE hMailslotRcv;
UINT uMsg;
HWND hOwner;
HANDLE hThreadRcv;
DWORD dwThreadId;
BOOL bThreadQuit;
static DWORD WINAPI ThreadRcvProc(LPVOID *pArg);
};
#endif
//////////
//.cpp
#include <windows.h>
#include "Msngr.h"
/* */
DWORD WINAPI TMsgSender::ThreadRcvProc(LPVOID *pArg)
{
DWORD cbMessage, cMessage, cbRead;
TCHAR *lpszBuffer;
TMsgSender *p= (TMsgSender *)pArg;
if(p-> hMailslotRcv != INVALID_HANDLE_VALUE)
{
while(!p-> bThreadQuit)
{
GetMailslotInfo(p-> hMailslotRcv, NULL, &cbMessage, &cMessage, NULL);
if(cMessage)
{
lpszBuffer=new TCHAR[cbMessage];
ReadFile(p-> hMailslotRcv, lpszBuffer, cbMessage, &cbRead, NULL);
SendMessage(p-> hOwner, p-> uMsg, (WPARAM) cbRead, (LPARAM) lpszBuffer);
delete[] lpszBuffer;
}
Sleep(1);
}
}
return 0;
}
/* */
TMsgSender::TMsgSender(HWND Owner, UINT uMessage)
{
hOwner=Owner;
uMsg=uMessage;
bThreadQuit=FALSE;
hMailslotRcv=CreateMailslot(TEXT( "\\\\.\\mailslot\\messngr "), 0, MAILSLOT_WAIT_FOREVER, NULL);
if(hMailslotRcv == INVALID_HANDLE_VALUE)
{
MessageBox(hOwner, TEXT( "CreateMailslot failed. "), NULL, MB_OK | MB_ICONWARNING);
}
hThreadRcv=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) ThreadRcvProc, (LPVOID) this, 0, &dwThreadId);
if(!hThreadRcv)
{
MessageBox(hOwner, TEXT( "CreateThread failed. "), NULL, MB_OK | MB_ICONWARNING);
}
}
/* */
TMsgSender::~TMsgSender(void)
{
bThreadQuit=TRUE;
CloseHandle(hMailslotRcv);
TerminateThread(hThreadRcv, 0);
}
/* */
BOOL TMsgSender::SendTo(TCHAR *Source, TCHAR *Target, TCHAR *Message)
{
return TRUE;
}