vieri122 发表于 2010-5-4 22:49:53

实现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 '::'
等等。
请问这个东西该如何实现?谢谢

sevencat 发表于 2010-5-5 07:47:11

这个模板参数一般可设为ACE_MT_SYNCH
ace_task内部有个队列,这个模板就是说明这个队列是线程锁类型。ACE_MT_SYNCH是多线程共享锁,还有个NULL_SYNCH的是不加锁。如果不用他的队列,也可以直接从ace_task_base来继承。

vieri122 发表于 2010-5-5 09:31:57

原帖由 <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,这样来实现通信。

vieri122 发表于 2010-5-5 09:35:31

另外如果用NULL_SYNCH,那么参数该如何给?

acedev 发表于 2010-5-6 11:38:24

回复 #1 vieri122 的帖子

APG教程 5.2.3任务间通信 有消费者生产者例子 可以参考

vieri122 发表于 2010-5-7 11:07:16

多谢楼上的,请问有能给我发个链接地址吗?
我用的库是最新的那个版本

acedev 发表于 2010-5-7 12:21:19

回复 #6 vieri122 的帖子

什么链接地址?

ACE程序员教程 代码在书上有

书可以在网上下载的

shenming 发表于 2010-5-16 00:05:02

呵呵。

class cyourclass : publicACE_Task<ACE_MT_SYNCH>
{
//todo
};

其实就是专递给ACE_Task的参数ACE_MT_SYNCH或NULL_SYNCH来同步或异步使用队列而已。
页: [1]
查看完整版本: 实现ace任务(线程)间通信的疑问