LAPI_Msgpoll 子例程

用途

使调用线程能够检查通信进度。

可用性库 (liblapi_r.a)

C 语法

#include <lapi.h>
 
int LAPI_Msgpoll(hndl, cnt, info)
lapi_handle_t     hndl;
uint              cnt;
lapi_msg_info_t  *info;

      
typedef struct {
    lapi_msg_state_t  status;      /* Message status returned from LAPI_Msgpoll */
    ulong             reserve[10]; /* Reserved                                  */
} lapi_msg_info_t;

FORTRAN 语法

include 'lapif.h'
 
LAPI_MSGPOLL(hndl, cnt, info, ierror)
INTEGER hndl
INTEGER cnt
TYPE (LAPI_MSG_STATE_T) :: info
INTEGER ierror

描述

Type of call: 本地进度监视器 (分块)

LAPI_Msgpoll 子例程允许调用线程检查通信进度。 通过此子例程, LAPI 提供了多次运行分派器的方法,直到完成进度或执行指定的最大分派器循环数为止。 此处,将 进展 定义为消息发送操作或消息接收操作的完成。

LAPI_Msgpoll 旨在在中断关闭时使用。 如果用户未显式关闭中断,那么 LAPI 在此子例程中暂时禁用中断方式,因为调用了分派器,它将处理任何暂挂的接收操作。 如果 LAPI 分派器循环达到指定的最大次数,那么调用将返回。 如果在最大计数之前进行进度,那么调用将立即返回。 在任何一种情况下, LAPI 都将通过引用传递的数据结构来报告状态。

lapi_msg_info_t 结构包含类型为 lapi_msg_state_t的标志字段 (status)。 状态 字段中的标志设置为如下所示:
LAPI_DISP_CNTR
如果分派器已循环 恩特 次而未取得进展
LAPI_SEND_COMPLETE
如果消息发送操作已完成
LAPI_RECV_COMPLETE
如果消息接收操作已完成
LAPI_BOTH_COMPLETE
如果一个消息发送操作和一个消息接收操作都已完成
LAPI_POLLING_NET
如果另一个线程已在轮询网络或共享内存完成情况

参数

INPUT
恩德尔
指定 LAPI 句柄。
恩特
指定分派器在返回之前应该循环且没有任何进展的最大次数。
信息
指定包含 LAPI_Msgpoll() 调用结果的状态结构。
输出
国际错误
指定 FORTRAN 返回码。 这始终是最后一个参数。

C 示例

要在分派器中循环不超过 1000 次,请检查已取得的进展:
{

    lapi_msg_info_t msg_info;
    int cnt = 1000;
    .  
    .
    .
    LAPI_Msgpoll(hndl, cnt, &msg_info);

    if ( msg_info.status & LAPI_BOTH_COMPLETE ) {
        /* both a message receive and a message send have been completed */
    } else if ( msg_info.status & LAPI_RECV_COMPLETE ) {
        /* just a message receive has been completed                     */
    } else if ( msg_info.status & LAPI_SEND_COMPLETE ) {
        /* just a message send has been completed                        */
    } else {
        /* cnt loops and no progress                                     */
    }


}

返回值

LAPI_SUCCESS
指示已成功完成函数调用。
LAPI_ERR_HNDL_INVALID
指示传入的 恩德尔 无效 (未初始化或处于 "已终止" 状态)。
LAPI_ERR_MSG_INFO_NULL
指示 info 指针为 NULL (在 C 中) 或 info 的值为 LAPI_ADDR_NULL (在 FORTRAN 中)。

位置

/usr/lib/liblapi_r.a