- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经设置了一个 Kaa 服务器并使用 SDK 开发了一个应用程序。但应用程序不发送事件消息。此应用程序应将进入 parking 场的汽车的车牌发送到服务器,并将事件发送到另一个应用程序(接收器应用程序)。应用程序向服务器发送数据但不发送事件。
有什么问题吗?
这是我的代码:
static void callback(void *context)
{
kaa_string_t plate;
kaa_user_log_record_t *log_record = kaa_logging_data_collection_create();
plate.data = "some license plate";
log_record->plate = &plate;
kaa_logging_add_record(kaa_client_get_context(context)->log_collector, log_record, NULL);
printf("%s uploaded\n", plate.data);
kaa_plate_detection_event_plate_event_t *plate_event = kaa_plate_detection_event_plate_event_create();
plate_event->plate = &plate;
kaa_error_t error_code = kaa_event_manager_send_kaa_plate_detection_event_plate_event(
kaa_client_get_context(context)->event_manager, plate_event, NULL);
//plate_event->destroy(plate_event);
printf("%s event sent\n", plate.data);
}
最佳答案
在 callback()
的开头你定义了 kaa_string_t plate;
==>这意味着它的内存分配在堆栈上。
稍后在同一范围内,您将创建一个指向 plate_event
的指针,它将用作您要发送的事件的参数。
在发送事件之前,您要分配 plate_event->plate = &plate
。这意味着 plate_event->plate
现在指向堆栈上的地址。
然后,(根据您在评论中写的内容)您将使用异步函数 发送事件。这意味着正在执行这个函数的线程并不是在等待消息真正被发送——这就是异步函数的意义。其他东西(可能是不同的线程,取决于 send_event 函数的实现)将负责发送。因此,不能保证在执行下一行代码之前发送消息。
在您的情况下,很可能在发送消息之前,callback()
的范围结束了。因此这个scope的内存自动释放,从现在开始失效,包括kaa_string_t plate
。然后在某个时候,异步发送正在执行,但它依赖于无效内存,因为现在 plate_event->plate
指向已释放的内存。
不是在堆栈上分配 kaa_string_t plate
,而是在堆上分配它 (malloc
)。然后内存一直有效,直到您自己释放它,当您确定消息已发送时。
类似的东西:
kaa_string_t *plate = malloc(sizeof(kaa_string_t));
strncpy(plate, "some license plate", sizeof(kaa_string_t));
...
// Now it's safe to do this:
plate_event->plate = plate;
// Sending event code
...
关于c - Kaa 不发送事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44696767/
是否有任何机制或方法或步骤来检测从应用程序到 KAA 服务器的端点(KAA SDK)连接。 如果不是,那么我们如何通过远程识别故障设备?或者我们如何识别在现场部署设备后无法与 KAA 服务器通信的设备
我需要尝试通过 Kaa C SDK for Raspberry Pi 调试 Kaa 应用程序。 例如:Cassandra 数据分析演示。 1- 请向我推荐最好的调试器工具,并且 2- 如何使用调试器工
我在 AWS 上安装了 Kaa Sandbox,在日志附加程序中使用默认值“localhost”和端口“27017”。这是正确的吗? 现在为“我的第一个 kaa 应用程序”运行 Java SDK 在
我从 git 克隆 kaa 源代码,并在我的 ubuntu 14.04 上成功构建并运行它。然后我也成功创建了kaa admin。 然后我将我的外发电子邮件设置设置为这样 SMTP 协议(protoc
如何在不集成第三方数据分析工具(如Spark,Hadoop)的情况下在KAA服务器中实现条件规则引擎? 是否可以在服务器端分析和过滤配置/事件模式,并且仅在条件匹配时才发送通知? 我找到了一些有关此问
我按照this document构建了ESP8266 SDK 但是编译报告显示以下错误。 [ 35%] Building C object kaa/CMakeFiles/extension_notif
我已经设置了一个 Kaa 服务器并使用 SDK 开发了一个应用程序。但应用程序不发送事件消息。此应用程序应将进入 parking 场的汽车的车牌发送到服务器,并将事件发送到另一个应用程序(接收器应用程
我想控制端点(Raspberry pi 3)的GPIO。 我尝试将两个 KAA 演示应用程序合并为一个。 (“Cassandra 数据分析”和“数据收集”) 由于 Raspberry Pi 只有一个演
我正在尝试在我的树莓派上构建一个C应用程序以将日志发送到kaa服务器,我正在遵循官方网站上的C文档。在使用 java 之前我已经成功地做到了这一点,但现在我尝试用 C 来做同样的应用程序。这是我的代码
编译 C++ SDK 时出现以下错误** 错误日志 ** fatal error :kaa/gen/EndpointGen.hpp:没有这样的文件或目录[ 1% ] 构建 CXX 对象 kaa/CMa
我想使用在虚拟机中给我们的 ssh kaa@127.0.0.1 -p 2222 ssh 进入 Kaa 的沙箱,在其中一个数据收集演示中它说我们需要ssh 进入 kaa 的沙箱,然后我们可以使用演示的应
我尝试使用 Kaa Sandbox(curl 命令和 UI)使用 Json 文件发送通知。 我的问题是: 当我使用 json 文件时,为什么不在客户端端点显示消息正文(通知演示(JAVA SDK)?!
我使用 Kaa 沙盒发送通知。 我必须在窗口终端上运行这些代码: curl -v -S -u devuser:devuser123 -F 'notification={"applicationId":
我正在尝试将日志模式从树莓派 C 应用程序发送到后端 kaa 服务器。这是架构 { "type" : "record", "name" : "RemoteSensorLog", "namespace"
我想“卡住”(即创建可自执行的、自包含的包)Kaa 编辑器。 (原因:只在python3.3+上运行,但是我的生产服务器有python2.7和python3.2,我不想改) 运行kaa的主要脚本是什么
我想使用原始 TCP 将事件发送到 Kaa 平台,我不想为此使用生成的 SDK,所以我想问一下有什么办法可以做到这一点吗?我在哪里可以找到在没有 SDK 的情况下手动使用 Kaa TCP 协议(pro
我正在尝试在树莓派 3 上构建一个 C 应用程序,它收集一些传感器读数并将它们记录到 mongodb 日志附加程序中。我面临应用程序的非常奇怪的行为 这是我的应用程序代码,从主函数调用 #includ
我想使用 java SDK 构建一个 kaa actor 网关。执行器应处理来自不同端点(温度传感器 - 湿度传感器 - ...)的数据,并将其数据记录到 kaa 平台。如何做到这一点我应该从管理控制
我正在使用 KAA iOT 服务器将我的硬件与云连接。我已经在硬件中实现了 MQTT 协议(protocol),并且需要实现 Actor Gateway 或其他解决方案来实现硬件和云之间的通信。我无法
因此,我正在使用 Java SDK 遵循“您的第一个 Kaa 应用程序”教程,一切都很顺利,直到构建应用程序为止。因此,当我尝试运行该应用程序时,出现以下错误。 > C:\Temp\demo_app>
我是一名优秀的程序员,十分优秀!