ACE消息队列的示例代码

本文展示了一个使用ACE库实现的消息队列示例程序。该程序通过多线程方式发送和接收自定义消息结构体,演示了ACE消息队列的基本用法及线程间的同步机制。

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

#include "ace/ACE.h"
#include "ace/OS.h"
#include "ace/Synch.h"
#include "ace/Message_Queue_T.h"
#include "ace/Thread_Mutex.h"
#include "ace/Thread_Manager.h"
#include <iostream>

struct MYMSG
{
int version;
int sn;
char *context;
};

class CTest
{
public:
CTest();
~CTest();

int init();

private:
ACE_Message_Queue<ACE_MT_SYNCH> m_queue;

static void handleSend(void *p);
};


int main(int argc, char* argv[])
{
CTest myTest;
myTest.init();
ACE_Thread_Manager::instance()->wait();
return 0;
}

CTest::CTest()
{

}

CTest::~CTest()
{

}

int CTest::init()
{
// 创建出来一个线程
ACE_Thread_Manager::instance()->spawn((ACE_THR_FUNC)CTest::handleSend, (void*)this,
THR_NEW_LWP|THR_JOINABLE);

Sleep(2000);
int i = 0;
for (; i < 20000; i++)
{
MYMSG *myMsg = new MYMSG;
myMsg->version = 1;
myMsg->sn = i;

ACE_Message_Block *msgBlock = new ACE_Message_Block((const char *)myMsg, sizeof(MYMSG));

m_queue.enqueue(msgBlock);
}

return 0;
}

void CTest::handleSend(void *p)
{
if (NULL == p)
{
return;
}
CTest *my = (CTest *)p;

ACE_Message_Queue<ACE_MT_SYNCH> *msgQueue = &my->m_queue;
if (NULL == msgQueue)
{
return;
}

ACE_Time_Value timeout;
while (true)
{

ACE_Message_Block * mb = NULL;
msgQueue->dequeue(mb);
if (NULL != mb)
{
MYMSG *myMsg = (MYMSG *)mb->base();
delete mb;
mb = NULL;

std::cout << "sn = " << myMsg->sn << std::endl;
delete myMsg;
myMsg = NULL;
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值