当前位置: 代码迷 >> WinCE >> 进程间通讯有关问题-管道通讯
  详细解决方案

进程间通讯有关问题-管道通讯

热度:181   发布时间:2016-04-28 11:58:20.0
进程间通讯问题---管道通讯
VC外行,请教个问题
这篇博文里有关于进程间通讯--管道通讯的例子
http://blog.csdn.net/firehood_/article/details/6275565
我是直接抄的代码,但是接收程序的回调函数只有在程序启动时才进入,弹出界面后再也不能进入到程序里


// 接收进程  
//////////////////////////////////////////////////////////////////////////////////  
// 声明消息回调函数  
BOOL CALLBACK RecvMsgProc(PVOID pData, DWORD dwSize);  
  
// 创建只读消息队列  
CMsgQueue cMsgQueue(L"MsgQueueTest",1024,ReadMode);  
// 设置消息回调函数  
cMsgQueue.SetMsgCallBack(RecvMsgProc,NULL);  
  
// 处理消息  
BOOL CALLBACK RecvMsgProc(PVOID pData, DWORD dwSize)  
{  
    printf("RecvMsgProc:Rev data Size=%d/n",dwSize);  
    wchar_t data[256];  
    memcpy(data, pData,dwSize);  
    return TRUE;  
}  
////////////////////////////////////////////////////////////////////////////////// 

这是博文里贴的接收进城

我是直接在窗体初始化函数里

BOOL CTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
//  执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标

// TODO: 在此添加额外的初始化代码

// 创建只读消息队列  
CMsgQueue cMsgQueue(L"RFIDMsgQueue",1024, ReadMode);  
// 设置消息回调函数  
cMsgQueue.SetMsgCallBack(RecvMsgProc,NULL);  

return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}


只有刚启动时会进入到SetMsgCallBack里,窗体弹出后就不启动了。
这样写不对嘛?回调函数是要单独在一个线程里调用才能循环吗?

我刚写的串口程序,也是在窗体初始化函数里启动串口接收回调函数的,那个程序可以一直回调,当串口接收到新数据时,都能接收到。


------解决方案--------------------
WinCE 本身就支持 Message Queue 的,不必使用 PC 上的方法

此类 Message 的接收,最好是放在一个线程里。
------解决方案--------------------
这个具体有看 ?CMsgQueue? 的实现
  相关解决方案