AUTOSAR_EXP_ARAComAPI的5章笔记(10)
5.4.4. 提供服务实例
骨架提供了 OfferService () 方法。作为服务提供方的开发人员,在满足以下条件后,您将在该实例上调用OfferService () 方法。
-
实例化了服务实现类;
-
服务实例初始化为能够处理请求(方法调用预备好了);
-
可以向订阅此服务实例的服务消费者提供事件的状态;
从调用OfferService () 开始,即使对 OfferService () 的调用尚未返回,也可能会把方法调用分派到服务实例,如果您在某个时刻(可能由于某些状态更改)决定不再提供该服务,则在实例上调用 StopOfferService ()。这里的约定是:在 StopOfferService () 返回后,不会再向服务实例分派进一步的方法调用。出于合理性原因,ara::com 要求 AP 供应商在实现骨架类的析构函数时,如果实例当前正在提供服务,则内部也执行 StopOfferService ()。
因此,“停止提供” 仅需要在存在的服务实例上调用,并且在其生命周期内,它在可见并提供服务的状态和不提供服务的状态之间切换。
using namespace ara::com;/*** 我们对RadarService的实现 - * RadarServiceSkeleton的子类*/
class RadarServiceImpl;int main(int argc, char** argv)
{// 从命令行读取实例标识符ara::core::string_view instanceIdStr(argv[1]);RadarServiceImpl myRadarService(InstanceIdentifier(instanceIdStr));// 在此处进行一些特定于服务的初始化....myRadarService.init();// 现在服务实例已准备就绪 -> 使其可见/可用myRadarService.OfferService();// 进入主线程的某种等待状态 - 等待AppExecMgr// 信号或类似的东西....return 0;
}