Wince跨进程通信之MsgQueue
来源:互联网 发布:优化公司人事是干啥的 编辑:程序博客网 时间:2024/05/22 15:30
Wince4.0以后的版本中,当进程A要向进程B单向通信时,可以使用消息队列MsgQueue
基本思路是:
进程B创建一个可读性的消息队列Queue,写一个循环,在循环中读取其他进程写入Queue中的数据
进程A创建一个与Queue相同名字的可写性消息队列,获得B进程的句柄,打开消息队列,然后写数据
具体程序如下:
(1)进程B
HANDLE hMsgQRead;
DWORD numRead;
TCHAR buf[30];
MSGQUEUEOPTIONS qoptions =
{
sizeof(MSGQUEUEOPTIONS),
MSGQUEUE_NOPRECOMMIT,
8,//最多只能存在8个消息在消息队列中
sizeof(buf),//每个消息的最大字节数
TRUE//可读性消息队列
};
hMsgQRead = CreateMsgQueue(TEXT("TESTQUEUE"), &qoptions);
if(hMsgQRead == NULL)
{
AfxMessageBox( _T( "Create FAIL!" ) );
return ;
}
DWORD Flag;
while( true )
{
WaitForSingleObject( hMsgQRead, 2 );
if(ReadMsgQueue(hMsgQRead, buf, 30, &numRead, 2, &Flag) )
{
AfxMessageBox( buf ) ;
}
}
(2)进程A
HANDLE hMsgQWrite;
HANDLE hMsgQOpen;
TCHAR buf[30] = {'G','E','T','/0'};
MSGQUEUEOPTIONS qoptions =
{
sizeof(MSGQUEUEOPTIONS),
MSGQUEUE_NOPRECOMMIT,
8,
sizeof(buf),
FALSE//可写性消息队列
};
hMsgQWrite = CreateMsgQueue(TEXT("TESTQUEUE"), &qoptions);//与B中创建的消息队列名同为"TESTQUEUE"
if(hMsgQWrite == NULL)
{
MessageBox ( _T( " create fail " ) );
return ;
}
HANDLE pr;//进程B句柄
*( int * )&pr= 66;//这里假设进程B句柄值为66,实际编程的话还是要靠读者自己去获得
hMsgQOpen = OpenMsgQueue( pr, hMsgQWrite, &qoptions );
if(hMsgQOpen == NULL)
{
MessageBox ( _T( " open fail " ) );
return ;
}
WaitForSingleObject(hMsgQOpen, INFINITE);
if(!WriteMsgQueue(hMsgQOpen, buf, 30, 1000, MSGQUEUE_MSGALERT))
{
MessageBox ( _T( " Write fail " ) );
}
- Wince跨进程通信之MsgQueue
- wince 窗体跨进程通信
- 跨进程通信之WM_COPYDATA
- 跨进程通信之Messenger
- 跨进程通信之AIDL
- Android中跨进程通信之Activity
- Android 跨进程通信之:AIDL
- Android跨进程通信之ContentProvider
- android之AIDL跨进程通信详解
- Android跨进程通信之AIDL
- 四大跨进程通信组件之AIDL(跨进程service通信)
- C# 跨进程通信
- C# 跨进程通信
- android 跨进程通信
- Android 跨进程通信
- Android跨进程通信
- Android跨进程通信
- Android跨进程通信
- 大型网站页面静态化解决方案
- PHP函数调用及循环体内定义大型变量效率的研究
- 这句话非常重要。
- 转载(一)代码注入的三种方法
- 彻底解决delphi Indy10接收邮件汉字显示乱码的问题
- Wince跨进程通信之MsgQueue
- softice在xp下的安装
- Windows Management Instrumentation(WMI) 之 Win32 类
- pluto分析
- 记录一些blog地址
- tar 文件结构
- 测试widget
- ABAP DOI EXCEL
- 字符串操作