paho mqtt callback function with c 如何减少else if 的个数?
How to reduce the number of else if in paho mqtt callback function with c?
我正在使用PAHO mqtt asynchronous function
订阅主题,但是我发现了一个问题。我在回调函数messageArrived
中接收并解析主题时,需要写很多else if
来判断是否是对应的主题。如果是的话,我订阅了很多话题,那么else if
之后写的话题实施起来会比较慢,因为需要一一比较。而且因为topicname是char类型,所以不能用switch... Case...
,你有什么好主意
rc = MQTTAsync_setCallbacks(MqttClient, (VOID*)MqttClient, connlost, messageArrived,
deliveryComplete);
...
INT32 messageArrived(VOID *context, CHAR *topicName, INT32 topicLen, MQTTAsync_message *message)
{
if (strcmp(topicName, TOPIC1) == 0)
{
//do something
}
else if (strcmp(topicName, TOPIC2) == 0)
{
//do something
}
...
// many 'else if'
...
else if (strcmp(topicName, TOPICn) == 0)
{
//do something
}
}
如果您有大量可能的字符串需要检查,您需要更改整个算法才能使其变得更有效率。有两种常见的方法可以有效地实现这一点:
- 通过排序的 table 常量字符串,您可以对其进行二进制搜索,或者
- 作为字符串的散列table
对于一定数量的字符串,二分查找将优于哈希 table,之后哈希 table 将变得更有效。
我正在使用PAHO mqtt asynchronous function
订阅主题,但是我发现了一个问题。我在回调函数messageArrived
中接收并解析主题时,需要写很多else if
来判断是否是对应的主题。如果是的话,我订阅了很多话题,那么else if
之后写的话题实施起来会比较慢,因为需要一一比较。而且因为topicname是char类型,所以不能用switch... Case...
,你有什么好主意
rc = MQTTAsync_setCallbacks(MqttClient, (VOID*)MqttClient, connlost, messageArrived,
deliveryComplete);
...
INT32 messageArrived(VOID *context, CHAR *topicName, INT32 topicLen, MQTTAsync_message *message)
{
if (strcmp(topicName, TOPIC1) == 0)
{
//do something
}
else if (strcmp(topicName, TOPIC2) == 0)
{
//do something
}
...
// many 'else if'
...
else if (strcmp(topicName, TOPICn) == 0)
{
//do something
}
}
如果您有大量可能的字符串需要检查,您需要更改整个算法才能使其变得更有效率。有两种常见的方法可以有效地实现这一点:
- 通过排序的 table 常量字符串,您可以对其进行二进制搜索,或者
- 作为字符串的散列table
对于一定数量的字符串,二分查找将优于哈希 table,之后哈希 table 将变得更有效。