#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;
}
}
}
ACE消息队列的示例代码
最新推荐文章于 2017-08-01 16:12:00 发布