Node.js C++ uv_async_t 发送消息:类型区分和数据传递
Node.js C++ uv_async_t 发送消息:类型区分和数据传递
在使用 uv_async_t 发送消息时,可以通过定义一个结构体来区分不同类型的消息,并在结构体中携带相应的数据。
typedef struct {
int type; // 消息类型
void* data; // 数据指针
} Message;
发送消息:
- 将数据结构填充到
Message结构体中。 - 使用
uv_async_send函数发送消息。
Message msg;
msg.type = MESSAGE_TYPE_XXX;
msg.data = (void*) &data; // data 是任意结构体
uv_async_send(async_handle, (void*) &msg);
接收消息:
- 将传入的参数转换为
Message结构体。 - 根据消息类型进行相应的处理。
void async_callback(uv_async_t* handle, int status, void* data) {
Message* msg = (Message*) data;
switch (msg->type) {
case MESSAGE_TYPE_XXX:
// 处理类型为 MESSAGE_TYPE_XXX 的消息
Data* data = (Data*) msg->data;
// 进行相应的操作
break;
case MESSAGE_TYPE_YYY:
// 处理类型为 MESSAGE_TYPE_YYY 的消息
...
break;
default:
break;
}
}
优点:
- 通过结构体区分消息类型,使消息处理更加灵活。
- 可以携带任意结构体数据,满足各种应用场景。
注意:
data指针指向的数据结构需要在发送消息之前分配内存。- 接收消息时需要根据
data指针的类型进行相应的转换。 - 使用
uv_async_send发送的消息必须在接收消息的线程中处理。
原文地址: https://www.cveoy.top/t/topic/opuG 著作权归作者所有。请勿转载和采集!