slice的AMD方法实现与调用

原创 2012年03月22日 22:55:45
借由一个interface来说明amd方法的使用:
interface MyInterface
{
int NormalOp(string name, out long l);
["amd"] int AmdOp(string name, out long l);
};


生成的c++代码如下:
class MyInterface : public virtual IceProxy::Ice::Object
{
public:
       // normal方法
virtual Ice::Int NormalOp(const std::string& name, Ice::Long& l);
    
// amd方法
       virtual void Amdop_async(const AMD_MyInterface_AmdOpPtr&, const std::string& name);
};


class AMD_MyInterface_AmdOp : public ...
{
public:
void ice_response(Ice::Int ret, Ice::Long l);
void ice_exception(const std::exception& ex);
void ice_exception();
};


服务器接口实现:
class MyInterfaceI : virtual public MyInterface
{
public:
virtual Ice::Int NormalOp(const std::string& name, Ice::Long& l)
{
   cout<<"name :"<<name<<endl;
l = 10;
return 0;
}
    
        virtual void Amdop_async(const AMD_MyInterface_AmdOpPtr& cb, const std::string& name)
{
       cout<<"name :"<<name<<endl;
_workQueue->add(cb);

// which in workQueue, the code is
// cb->ice_response(0, 10);
}
}


注意:
1、一个接口中的方法要么是同步分派,要么是异步分派,不能二者同时存在,对于每个amd的接口操作均映射一个<operation>_async的分派方法和一个
   AMD_<interface>_<operation>的回调接口类。   
2、如果在服务端的方法实现中发生任何异常,需要捕获并通过对应的回调接口的ice_exception方法返回,ice的runtime不会自动捕获异常并返回给客户端
3、一般来说,如果在服务器端的接口实现中有任何阻塞的行为,例如IO阻塞,同步阻塞,那么最好将接口实现成异步方法分派的,并请请求的callback发送到工作线程中
   由工作线程来处理请求,并在完成请求后在合适的时间通过调用ice_reponse返回结果或者通过ice_exception返回异常
4、异步方法分派仅仅影响到了接口在服务器端的实现,任何客户端的请求操作和服务器端的服务加载均和普通接口一致

slice的c++映射

1、Slice标识符映射到相同的C++标识符。(尽量不要使用与语言相关的标示符) 2、Slice模块映射到C++名字空间。 3、Slice基本数据的bool和string映射到C++的bool和s...

ice的facet使用

1、一个ICE对象在服务器端可以有多个表现方式,这种表现方式可称为facet,每个facet其实是servant对象    的一组功能集合的名称,在服务器端,操作对象的facet有如下API:  ...

ice环境初始化和slice方法调用

1、客户端环境调用 #include int main(int argc, char* argv[]) {     Ice::CommunicatorPtr ic;    try    {...

PHP array_slice() 数组分页的实现方法

  • jinhwu
  • jinhwu
  • 2016年07月18日 10:49
  • 3776

手动实现数组slice方法跟splice方法

var ary2 = [1, 2, 3, 5, 4, 53, 42]; Array.prototype.slice2 = function (n, m) { v...

数组对象的slice和splice方法

数组对象的slice和splice方法 之前被大神虐过一次,长长记性,专门把这两个方法拿出来做一个比较,本文仅做学习笔记使用,如有任何意见或建议欢迎在评论区指出。   slice 定...
  • daiqisi
  • daiqisi
  • 2017年02月09日 11:11
  • 3695

JS字符串操作方法 slice、substr、substring及其IE兼容性

一、slice() 定义:接受一个或者两个参数,第一个参数指定子字符串的开始位置。第二个参数表示子字符串的结束位置(不包括结束位置的那个字符),如果没有传递第二个参数,则将字符串的长度作为结束位...

0714学习笔记list常用操作索引(index)和切片(slice) 字符串的方法分割split和连接join

list常用操作:索引(index)和切片(slice) 索引(index): 操作符[序号访问] 除了指定位置进行索引外,list还可以处理负数的索引 l = [3, 'yes',...

小结concat()、slice()、splice()操作方法

今天继续来总结一下ECMAscript为操作已经包含在数组中的项提供了很多方法。第一个先讲concat()方法。        这个方法可以理解为一种合并。concat()方法的具体用法是:它可以创...

谈一谈Go的切片Slice的使用方法

Slice切片本身并不是数组,它指向底层的数组 作为变长数组的替代方案,可以关联底层数组的局部或全部 为引用类型 可以直接创建或从底层数组获取生成 使用len()获取元素个数,cap()获取容量 一般...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:slice的AMD方法实现与调用
举报原因:
原因补充:

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