【发布时间】:2011-10-19 18:51:04
【问题描述】:
我的任务是为分布式应用程序(在单台计算机上运行多个进程,尚未物理分布)设计一个新界面,该应用程序由许多用 C++/OpenGL 编写的图形面板模块和一个用艾达。
模块以参数的形式共享信息(标量非结构化信息,例如:整数、字符串、浮点数等...)。我打算设计一个基于 Boost::Asio 库和两个简单“客户端”原语的每个模块链接的基于异步套接字的组件(我将在下文中将其称为“接口组件”或 IC):
Put([ParameterName], [DestinationModule], [Payload], [Type])
Get([ParameterName], [Sourcemodule], [Payload])
ParameterName:指定唯一的参数名称
DestinationModule/SourceModule:寻址系统中的模块
有效负载:实际data
类型:标识所传递参数类型的字符串或值
这些原语中的每一个都在服务器端由两个相应的函数(在 IC 上)处理:
//No function parameters shown here as I don't know
//exactly how I'm going to do this
ProcessPutRequest()
ProcessGetRequest()
因为传入命令的处理将由 IC 启动,我打算使用将传递给上述函数的函数处理程序。这样每个模块负责的每个程序员都可以处理传入的命令并对自己的代码执行必要的类型转换。
问题是……这在 Ada 中可行吗?我知道可以在 C++ 中导入函数并从 Ada 程序中调用它 btu 是否可以将函数处理程序从 Ada 传递给 C++ 组件?
(附带的问题是:您对实现此接口的更好方法有什么建议吗?)
【问题讨论】:
-
除了通过传入处理函数的地址可以在纯 C 语言中执行的操作之外,您所说的“函数处理程序”还有什么意思吗?您当然可以在 Ada 中编写与此类处理函数等效的函数。虽然如果 Ada 调用你的 Get() 我不明白你为什么想要?
-
哎呀,我想我的问题应该更完整:我想使用这个接口来使我的应用程序的每个模块都能够执行客户端和服务器操作。作为服务器,模块将需要处理传入的数据。当此数据(参数或消息)到达时,由接口组件处理。问题是:如何让模块在不轮询 IC 的情况下处理传入的数据?使用处理程序的想法是调用它们,以便在消息到达 IC 时调用模块代码。
标签: c++ sockets asynchronous boost-asio ada