SendMessage进程间简单通信问题
来源:互联网 发布:淘宝8倍望远镜 编辑:程序博客网 时间:2024/05/14 17:40
本例以两个VC Dialog application 为例用SendMessage进行两进程间简单通信:
主要API:FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName )
//通过进程名得到进程handle
SendMessage(UINT message, WPARAM wParam = 0, LPARAM lParam = 0)
//The result of the message processing; its value depends on the message sent.
主程序 Server :其他均为默认.
MFC 建立一Dialog 应用程序,工程名字:Server
添加一Button控件command,并与之对应的函数OnCommand
在ServerDlg.h里添加自己的消息:#define WM_COMM WM_USER+10
函数 OnCommand 添加代码:
{
CString str="Client";
CWnd *pWnd=CWnd::FindWindow(NULL,str);
if(pWnd)
pWnd->SendMessage(WM_COMM,0,0);//通过SendMessage的后两个参数
//WPARAM wParam, LPARAM lParam传递信息
else MessageBox("FindWindow NULL");
}
MFC另 建立一Dialog 应用程序,工程名字:Client 在 其
OnInitDialog里最后添加代码SetWindowText("Client");
在Client.h里添加自己的消息:#define WM_COMM WM_USER+10
添加消息映射:
BEGIN_MESSAGE_MAP(CSenderDlg, CDialog)
//{{AFX_MSG_MAP(CSenderDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_MESSAGE(WM_COMM,OnSendMsg)//添加的自己的消息处理
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
给ClientDlg.cpp添加自己的消息处理函数OnSendMsg(WPARAM wParam, LPARAM lParam)
{
// wParam lParam既是要传递的信息
if(wParam==0 && lParam==0)
AfxMessageBox("HelloWorld!");
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
给线程传递参数的方法
typedef struct tagMyParam{
HWND hHost;
.../*other struct member*/
}MyParam;
DWORD WINAPI MyThreadProc(LPVOID param)
{
MyParam* pmp = (MyParam*)param;
.../*you codeing*/
SendMessage(pmp->hHost,....);
...
}
/*主线程内把要使用的窗口句柄赋给结构*/
MyParam mp;
mp.hHost = m_hWnd; /*you master window handle*/
...
/*创建线程是把参数传进去*/
DWORD dwid;
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)MyThreadProc,(void*)&mp,0,&dwid);
不同线程之间的数据存储最好存在 Heap 里,或者全局变量也行,也就是说千万不要把楼上的 MyParam mp; 变量声明在函数过程中,这样函数一结束 &mp 该指针指向的数据就会失效。因此你一定要把它放到全局变量或动态分配的内存中(malloc 或 HeapAlloc,其实一样。)。
还有,如果你要声明一个线程之间的通讯标志变量,例如 bool bStop 那么最好把它加上 volatile 关键字,这样会防止编译器在优化时把改变量的值存储在寄存器内,引起变量值的过期。
- SendMessage进程间简单通信问题
- SendMessage进程间简单通信问题
- SendMessage进程间简单通信问题
- 进程间通信简单实现之SendMessage/PostMessage
- 利用SendMessage实现C#进程间通信
- 利用SendMessage实现C#进程间通信
- 利用SendMessage实现C#进程间通信
- 如何利用SendMessage实现C#进程间通信?
- 如何利用SendMessage实现C#进程间通信?收藏
- IPC之 - C#中用WM_COPYDATA SendMessage 进程间通信
- 内存映射文件与SendMessage进程间通信写写
- C#_如何利用SendMessage实现C#进程间通信?
- 如何利用SendMessage实现C#进程间通信?
- MFC使用SendMessage()发送自定义消息实现进程间通信
- MFC使用SendMessage()发送自定义消息实现进程间通信
- MFC使用SendMessage()发送自定义消息实现进程间通信
- MFC使用SendMessage()发送自定义消息实现进程间通信
- C#基于sendmessage方法的进程间通信
- 通过程序得到服务器上面的oracle数据库的版本号
- 对链表的操作(C版)
- dBm、dBi、dBd、dB和dBc几个基本单位概念
- 使用文字输出日期格式化方法。
- c/s程序版本自动升级的问题,如何判断client端版本号是否最新,然后从指定ftp服务器down
- SendMessage进程间简单通信问题
- Wincc介绍
- 资源修改器
- 原创和收藏的正则表达式
- JavaDoc,在Java的注释上做文章
- 开始汉化 EA v7.1.831 企业版
- 数组的setvalue,getvalue,getlength等属性
- 关于document.cookie的使用
- Wincc安装步骤