找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4505|回复: 7

实现ace任务(线程)间通信的疑问

[复制链接]
发表于 2010-5-4 22:49:53 | 显示全部楼层 |阅读模式
最近因为工作需要在学习ACE。
想写一个类似生产者和消费者的demo,来熟悉ace多任务(线程)通信。
结果碰到一个问题。
我自定义的类,继承自 ACE_Task< ACE_SYNCH_DECL > Class Template,代码如下:
  1. #include “ace/task_T.h”
  2. template<typename T>
  3. class Consumer :public ACE_Task<T>
  4. {
  5. public:
  6.         Consumer(void);
  7.         ~Consumer(void);
  8.         int open(void* args = 0);
  9.         int close(u_long flags = 0);
  10.         int svc(void);
  11. };
复制代码
现在的问题是我主函数中如何使用这个模板类(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 '::'
等等。
请问这个东西该如何实现?谢谢
发表于 2010-5-5 07:47:11 | 显示全部楼层
这个模板参数一般可设为ACE_MT_SYNCH
ace_task内部有个队列,这个模板就是说明这个队列是线程锁类型。ACE_MT_SYNCH是多线程共享锁,还有个NULL_SYNCH的是不加锁。如果不用他的队列,也可以直接从ace_task_base来继承。
 楼主| 发表于 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,这样来实现通信。
 楼主| 发表于 2010-5-5 09:35:31 | 显示全部楼层
另外如果用NULL_SYNCH,那么参数该如何给?
发表于 2010-5-6 11:38:24 | 显示全部楼层

回复 #1 vieri122 的帖子

APG教程 5.2.3任务间通信 有消费者生产者例子 可以参考
 楼主| 发表于 2010-5-7 11:07:16 | 显示全部楼层
多谢楼上的,请问有能给我发个链接地址吗?
我用的库是最新的那个版本
发表于 2010-5-7 12:21:19 | 显示全部楼层

回复 #6 vieri122 的帖子

什么链接地址?

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

书可以在网上下载的
发表于 2010-5-16 00:05:02 | 显示全部楼层

呵呵。

class cyourclass : public  ACE_Task<ACE_MT_SYNCH>
{
//todo
};

其实就是专递给ACE_Task的参数ACE_MT_SYNCH或NULL_SYNCH来同步或异步使用队列而已。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-22 12:11 , Processed in 0.037419 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表