我正在尝试编写一个程序,该程序将持续读取将监测水位的传感器。然后在每次(10-15分钟)后,需要从其他传感器获取土壤湿度读数。我之前从未使用POSIX pthreads。到目前为止,这就是它如何运作的概念。
它似乎按照我想要的方式工作,但这是实现这一点的正确方法。还有什么我需要做的吗?
2:27 PM IllegalStateException
Android Studio could not interpret the results of the Gradle build correctly.
You may be able to recover from this issue by pressing 'Run' or 'Debug' again.
Please file a bug at b.android.com including this message and your idea.log (Help | Show Log in ..).
Session 'app': Error Launching activity .
答案 0 :(得分:3)
目前尚不清楚为什么每隔10秒创建一个新线程,而不是让原始版本继续。由于原始线程退出,您不是直接累积线程,而是您不等待它们中的任何一个,因此有一些资源未发布。你也不是错误检查,所以你不知道什么时候出错了;监控将停止。
你最终会以某种方式耗尽空间。你有几个选择。
soilMoisture()
函数中循环来保持线程运行,并取消funct()
- 或者至少调用pthread_create()
。pthread_attr_t
is not NULL中列出和链接的功能创建非默认pthread_attr_t
。您还没有处理过无数问题,尤其是两个线程之间的同步问题。如果你没有任何这样的同步,你最好使用两个独立的程序 - “每个程序完成一项工作,但做得好”的Unix口头禅仍然适用。你有一个程序可以读取土壤水分,另一个程序可以读取水位。您需要确定数据是存储在数据库中还是以其他方式记录,以及如何保存这些数据的日志。你需要考虑旋转日志。如果传感器脱机会发生什么?如何重新启动线程或进程?如何检测线程或进程何时意外锁定或意外退出?等
我认为问题中提到的10-15分钟与代码中的10秒之间的差异严格用于实际测试而不是对POSIX sleep()
函数的误解。