实现ace任务(线程)间通信的疑问
最近因为工作需要在学习ACE。想写一个类似生产者和消费者的demo,来熟悉ace多任务(线程)通信。
结果碰到一个问题。
我自定义的类,继承自 ACE_Task< ACE_SYNCH_DECL > Class Template,代码如下:
#include “ace/task_T.h”
template<typename T>
class Consumer :public ACE_Task<T>
{
public:
Consumer(void);
~Consumer(void);
int open(void* args = 0);
int close(u_long flags = 0);
int svc(void);
};
现在的问题是我主函数中如何使用这个模板类(Consumer)?
因为这是个模板类,模板参数我该如何给???
我随便给个模板参数如:
Consumer<int>* consumer = new Consumer<int>();
就会报一堆的错误,如:
1>d:\workspace\ace_wrappers\ace\message_queue_t.h(560): error C2825: '_ACE_SYNCH': must be a class or namespace when followed by '::'
等等。
请问这个东西该如何实现?谢谢 这个模板参数一般可设为ACE_MT_SYNCH
ace_task内部有个队列,这个模板就是说明这个队列是线程锁类型。ACE_MT_SYNCH是多线程共享锁,还有个NULL_SYNCH的是不加锁。如果不用他的队列,也可以直接从ace_task_base来继承。 原帖由 <i>sevencat</i> 于 2010-5-5 07:47 发表 <a href="http://www.acejoy.com/bbs/redirect.php?goto=findpost&pid=6877&ptid=2160" target="_blank"><img src="http://www.acejoy.com/bbs/images/common/back.gif" border="0" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open(this.src);}" onmousewheel="return imgzoom(this);" alt="" /></a><br />
这个模板参数一般可设为ACE_MT_SYNCH<br />
ace_task内部有个队列,这个模板就是说明这个队列是线程锁类型。ACE_MT_SYNCH是多线程共享锁,还有个NULL_SYNCH的是不加锁。如果不用他的队列,也可以直接从ace_task_base来继承。 ... <br />
谢谢,但是如果用ace_task_base的话,那么没有getq方法了。我的想法是在一个任务putq,然后在另外一个任务里getq,这样来实现通信。 另外如果用NULL_SYNCH,那么参数该如何给?
回复 #1 vieri122 的帖子
APG教程 5.2.3任务间通信 有消费者生产者例子 可以参考 多谢楼上的,请问有能给我发个链接地址吗?我用的库是最新的那个版本
回复 #6 vieri122 的帖子
什么链接地址?ACE程序员教程 代码在书上有
书可以在网上下载的
呵呵。
class cyourclass : publicACE_Task<ACE_MT_SYNCH>{
//todo
};
其实就是专递给ACE_Task的参数ACE_MT_SYNCH或NULL_SYNCH来同步或异步使用队列而已。
页:
[1]