Wince跨进程通信之MsgQueue

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 " ) );
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值