0

Linux 32 ビットの OpenSplice DDS Community Edition に取り組んでいます。ここでは、複数のトピックを作成できます。ここで、データ ライターはこのトピックに書き込むことができ、パブリッシャーはこれらのトピックをパブリッシュします。以下に示すように、出力を取得しようとしている利用可能なソースコードを変更してみました。

    Chatter 1: Hi there, I will send you 10 more exxpert messages.
    Chatter 1: Message no. 1
    Chatter 1: Message no. 2
    Chatter 1: Message no. 3
    Chatter 1: Message no. 4
    Chatter 1: Message no. 4
    Chatter 1: Message no. 5
    Chatter 1: Message no. 6
    Chatter 1: Message no. 7
    Chatter 1: Message no. 8
    Chatter 1: Message no. 9
    Chatter 1: Message no. 10

ソースコードは次のとおりです。

/* Initialize the chat messages on Heap. */
msg = Chat_ChatMessage__alloc();
checkHandle(msg, "Chat_ChatMessage__alloc");
msg->userID = ownID;
msg->index = 0;
msg->content = DDS_string_alloc(MAX_MSG_LEN);
checkHandle(msg->content, "DDS_string_alloc");
if (ownID == TERMINATION_MESSAGE) {
    snprintf (msg->content, MAX_MSG_LEN, "Termination message.");
} else {
    snprintf (msg->content, MAX_MSG_LEN, "Hi there, I will send you %d more messages.", NUM_MSG);
}
printf("Writing message: %s\n", msg->content);

//Initialize the chat messages on Heap//

/* Register a chat message for this user (pre-allocating resources for it!!) */
userHandle = Chat_ChatMessageDataWriter_register_instance(talker, msg);

/* Write a message using the pre-generated instance handle. */
status = Chat_ChatMessageDataWriter_write(talker, msg, userHandle);
checkStatus(status, "Chat_ChatMessageDataWriter_write");

/* Register a chat message for this user (pre-allocating resources for it!!) */
userHandle = Chat_ChatMessageDataWriter_register_instance(chatterbox, msg);

/* Write a message using the pre-generated instance handle. */
status = Chat_ChatMessageDataWriter_write(chatterbox, msg, userHandle);
checkStatus(status, "Chat_ChatMessageDataWriter_write");

sleep (1); /* do not run so fast! */
/* Write any number of messages, re-using the existing string-buffer: no leak!!. */
for (i = 1; i <= NUM_MSG && ownID != TERMINATION_MESSAGE; i++) {
    msg->index = i;
    snprintf ( msg->content, MAX_MSG_LEN, "Message no. %d", msg->index);
    printf("Writing message: %s\n", msg->content);
    status = Chat_ChatMessageDataWriter_write(talker, msg, userHandle);
    checkStatus(status, "Chat_ChatMessageDataWriter_write");
    sleep (1); /* do not run so fast! */
    }

 /* Write any number of messages, re-using the existing string-buffer: no leak!!. */
    for (i = 1; i <= NUM_MSG && ownID != TERMINATION_MESSAGE; i++) {
        msg->index = i;
        snprintf (msg->content, MAX_MSG_LEN, "Hi there, I will send you %d more exxpert_messages.", NUM_MSG);
        snprintf ( msg->content, MAX_MSG_LEN, "Message no. %d", msg->index);
        printf("Writing message: %s\n", msg->content);
        status = Chat_ChatMessageDataWriter_write(chatterbox, msg, userHandle);
        checkStatus(status, "Chat_ChatMessageDataWriter_write");
}

しかし、上記のコードの私の出力は次のとおりです。

    Writing message: Hi there, I will send you 10 more messages.
    Writing message: Message no. 1
    Error in Chat_ChatMessageDataWriter_write: DDS_RETCODE_PRECONDITION_NOT_MET
4

1 に答える 1

0

インスタンスを DataWriter に登録すると、次のコードのように InstanceHandle 型の値が返されます。

userHandle = Chat_ChatMessageDataWriter_register_instance(chatterbox, msg);

その userHandle 変数は、write()登録したのと同じ DataWriter でのみ使用できます。ただし、次のことを試みます。

status = Chat_ChatMessageDataWriter_write(talker, msg, userHandle);

異なる変数chatterboxと に注意してくださいtalker。変数はDataWriter にuserHandle属していないため、戻り値で失敗します。talkerPRECONDITION_NOT_MET

于 2016-05-24T01:28:21.307 に答える