我在C中使用了副翼客户端实现,我需要结束。但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块扩展,但是没有接受块的函数实现。
如何在处理程序中获取一些本地数据?
发布于 2022-02-23 08:54:31
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)
}https://stackoverflow.com/questions/71214171
复制相似问题