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? 的实现