当前位置: 首页 > 知识库问答 >
问题:

通过消息队列发送void*对象[linux]

爱唯
2023-03-14

因此,我实现了自己的mpi库(简化版本),我需要在进程之间发送/接收一些数据。MPI_Send看起来像这样(void *buf,整数计数,数据类型数据等)。所以这意味着我需要发送数据类型(char,double或int)的计数元素,指向buf的地址。我需要通过消息队列(mq)发送它们。MPI_Recv采用大致相同的参数。目前,这是我在发送和Recv中所做的:

    //Sender part of code
    ret=mq_send(mq,buf,sizeof(buf),0);
        if(ret < 0)
    return MPI_ERR_IO;
    //Receiver part of code
    ret = mq_receive(mq, buf, MSGSIZE, NULL );
    if(ret < 0)
    return MPI_ERR_IO;

现在我只接收数组的第一个元素。我该如何发送整个邮件?这是我想要的

    //Sender part of pseudocode
    for(i=0,count)
       element=(cast to datatype)buf[i]; 
       mq_send(mq,element,sizeof,0);
    //Receiver part of pseudocode
    //i receive the count number of elements prior to this message
    for(i=0,count)
       mq_receive(mq,local_variable,etc...)
       somehow store them into my void *buf which i receive as an argument ??

如果不够清楚,我会回复

共有1个答案

江永安
2023-03-14

您可以用mq_send的第三个参数指定放入队列的数据量。你的情况是:

ret=mq_send(mq,buf,sizeof(buf),0);

假设buf在某个地方按照如下方式初始化

float f[2];
void *buf = f;

那么表达式sizeof(buf)的意思是:称为“buf”的指针的大小。虽然它可能适用于某些架构,但正确的方法是

ret=mq_send(mq,buf,sizeof(float) * <number of elements>, 0);

也就是说,浮点的大小乘以数组中存储的浮点数。

在这种情况下,您可以将整个数组放入队列中。您还可以避免迭代,只使用恒定数量的消息,而不是线性数字。

 类似资料:
  • 我正在开发一个NativeScript Android应用程序,其中我希望用户能够在按下一个按钮后打开WhatsApp联系人(只知道电话号码)。我目前使用Nativescript-open-app打开WhatsApp。是否也可以打开对话? 要打开WhatsApp,我使用以下代码(也许可以修改“com.WhatsApp”?):

  • 我想通过javascript代码发送gcm消息。为此,我们需要发布一个json对象。 gcm文档:http://developer.android.com/google/gcm/adv.html.中给出了url和json对象格式 出于测试目的,我编写了一个完美运行的Java代码。但是爪哇脚本代码不起作用。如果有人有一些示例工作代码(gcm的爪哇脚本),请发布。 脚本代码 :

  • 消息的链式队列。 重要的数据结构 msqid_ds //位置/usr/include/linux/msg.h struct msqid_ds { struct ipc_perm msg_perm; struct msg *msg_first; /* 指向消息头 */ struct msg *msg_last; /* 指向消息尾 */ __

  • 问题内容: 我定义一个类,然后设置该类类型的对象。我想将此对象透明地发送到在另一台计算机上运行的另一个Java应用程序。什么是实现这一目标的最佳技术? 问题答案: 您可以使用Java API创建对象流并发送任何可序列化的对象。但您必须注意,这些内容不会通过网络进行加密: 在发送方方面: 在接收端:

  • 我有一个连接到lambda的队列(fifo)。我想在lambda中向标准队列发送一条消息。但没有发送/接收任何消息。然而,如果我尝试从非SQS连接的lambda(通过AppSync)发送它,它会工作。 我查过: lambda有权发送SQS消息(您可以在那里看到) 由于我已成功地从另一个lambda(非SQS)向标准队列发送消息,因此正确配置了标准队列 SQS URL是否正确 控制台中不会显示任何错

  • 我正在尝试为Web设置Firebase云消息传递。我成功地对其进行了正确初始化并获得了令牌: manifest.json与gcm_sender_id 我可以看到我在控制台中得到令牌,所以我试图验证它,并通过邮递员发送我的第一个通知-这里是留档。 发布网址:https://fcm.googleapis.com/v1/projects/PROJECTID/messages:发送授权:无授权 标题 Bo