0

我在 C 中使用 Aeron 客户端实现。我需要关闭。但是C中没有闭包...

例如:

void poll_handler(void *clientd, const uint8_t *buffer, size_t length, aeron_header_t *header)
{
    aeron_subscription_t* subscription = (aeron_subscription_t*)clientd;
    aeron_subscription_constants_t subscription_constants;
    aeron_header_values_t header_values;
    aeron_subscription_constants(subscription, &subscription_constants)
    aeron_header_values(header, &header_values);

    // How to get some_data here?
}

void some_func(int some_data)
{
    aeron_fragment_assembler_create(fragment_assembler, poll_handler, subscription)
}

我尝试使用 Clang 块扩展,但没有接受块的函数实现。

如何在处理程序中获取一些本地数据?

4

1 回答 1

0

aeron_fragment_assembler_create函数将指向任何结构的指针作为第三个参数。它不需要是aeron_subscription_t*.

您可以创建自己的结构,使用必要的数据对其进行初始化并传递一个指向它的指针。为方便起见,您可以aeron_subscription_t在结构中保存一个指针。

或多或少是这样的:

typedef struct some_data_t {
    aeron_subscription_t* subscription;
    // ...
} some_data_t ;

void poll_handler(void *clientd, const uint8_t *buffer, size_t length, aeron_header_t *header)
{
    some_data_t * some_data = (some_data_t *) clientd;
    aeron_subscription_t* subscription = some_data->subscription;

    // ...
}

void some_func(some_data_t* some_data)
{
    aeron_fragment_assembler_create(fragment_assembler, poll_handler, some_data)
}
于 2022-02-23T08:54:31.930 回答