接收消息

下图显示了从动态访问模块 (DMOD) 接收消息的方法。

显示如何使用路由过程接收消息的图像。
使用路由过程接收消息

DMOD 初始化后,3270 仿真器通过调用 sepdrout 来注册路由过程。 当 DMOD 接收到消息后,将调用 3270 仿真器路由过程,然后可以处理该消息。

使用此方法时,DMOD 线程和 3270 仿真器线程之间没有上下文切换。 但是,路由过程必须快速将控制返回给 DMOD。 例如,不能挂起等待键盘输入。

应用程序必须确定接收的消息是用于此应用程序还是用于其他应用程序。 如果消息不是用于此应用程序,则路由过程必须返回,指示未处理消息。 如果应用程序处理消息,则它负责在处理完成后释放缓冲区。

在某些情况下,路由过程可以处理完消息。 路由过程的替代方法是将消息放入应用程序队列,然后清除应用程序信号灯。 随后,应用程序可以处理消息。

通过在接收到消息时发送来自路由过程的 Status-Resource 消息(向本地节点返回额度,使其能够发送更多数据),而不是等到处理完消息,从而进一步提高性能。 示例代码:初始化和路由过程中阐释了此使用情况。 有关额度和流控制的详细信息,请参阅速度和区块

在应用程序收到消息后,应用程序负责接收消息的缓冲区。 应用程序必须重复使用缓冲区以发送消息(使用 sbpusend)或发布消息(使用 sepdburl)。 如果要重复使用的缓冲区不包含要发送的消息的正确元素数,则应用程序可以获取其他元素(使用 sbpibegt)或发布现有元素(使用 sbpiberl)。 在这种情况下,应用程序还必须确保缓冲区头中的 numelts 字段指示正确的元素数。