在使用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;
}