Wince跨进程通信之MsgQueue

本文介绍Wince4.0环境下进程间通过消息队列进行单向通信的方法。进程B创建可读消息队列,并循环读取数据;进程A创建同名的可写消息队列,向B发送数据。示例代码展示了创建消息队列、打开队列及读写操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值