使用ACE_Task的时候要留意putq函数

原创 2006年06月15日 15:33:00

在使用ACE_Task的时候,可以把这个对象看成一个处理器对象,他有一个消息队列,有一堆的线程在处理这一个消息。所以在应用中使用这个东西的机会特别的多。这次我使用的时候发现一个这样的问题。如果数据的速度太快了的时候将会使调用putq函数调用不成功。
这是一个例子代码,其实每一个Task都聚集了一个msg_queue对象的指针,他有一个参数:high_water_mark,就是说,在这个队列中的每个元素的size之和的最高。他的默认值是1024*16。但是有可能还是被占满了。如果发现putq不成功的时候就要使用这个东西来调整水位了。

int ACE_TMAIN(int, ACE_TCHAR *[])
{
 MyTask task;
 task.star();
 task.msg_queue_->high_water_mark(16385);
 ACE_Message_Block *new1=new ACE_Message_Block(16384);
 task.putq(new1);
 new1=new ACE_Message_Block(1);
 ACE_Time_Value tv(0,1000);

 if (task.putq(new1,&tv)==-1)
 {
  cout<<"put时失败"<<endl;
 }
 getchar();
 return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

ACE_Task::putq

int ACE_Task::putq (     ACE_Message_Block * , ACE_Time_Value *     timeout = 0    )    ...

ACE_Task介绍(生产者/消费者)v3.0

1ACE_Task 概述 ACE_Task是ACE中的任务或主动对象“处理结构”的基类。ACE使用此类来实现主动对象模式。所有希望成为“主动对象”的对象都必须由此类派生。同时可将它看作是更高级的、...

ACE_Task框架

在我看来,ACE的ACE_Task框架提供了一种基于消息的编程模式,可以Windows编程的消息循环进行类比。   ACE_Task Windows 消息循环 说明 消息...

ACE_Task的生产者和消费者

#include "ace/Task.h" #include "ace/Message_Block.h" #include "ace/OS.h" const int N = 10; //The C...

ACE_Task

我们在前一章中使用ACE_Thread包装时,你一定已经注意到了一些不够"优雅"的地方。那一章中的大多数程序都被分解为函数、而不是对象。这是因为ACE_Thread包装需要一个全局函数名、或是静态方法...

[ACE程序员教程笔记]Task间通讯

Task可以视为更高一个级别的线程对象,各个Task之间的同学也就是线程之间的通讯,在ACE中,采用了消息队列的方式进行处理。每一个Task封装一个ACE_Message_Queue,对于这个消息队列...

ACE_Task框架 与Windows 消息循环对比

最近接触  在我看来,ACE的ACE_Task框架提供了一种基于消息的编程模式,可以Windows编程的消息循环进行类比。   ACE_Task Windo...

ACE_Task(任务)

任务和主动对象(Active Object): 并发编程模式 - ACE程序员教程2008-12-07 13:52 5.2 ACE_Task(任务) 每个ACE_Task对象都包含一个或多...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)