首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中使用p线程?

在C中使用p线程?
EN

Stack Overflow用户
提问于 2017-03-31 04:32:47
回答 1查看 347关注 0票数 1

我正在尝试编写一个程序,它将不断地从一个传感器上读取,该传感器将监测水位。然后,每隔10到15分钟,它就需要从其他传感器获取土壤湿度读数。我以前从未使用过POSIX线程。到目前为止,这是我对它如何工作的一个概念。

它似乎按照我所希望的方式工作,但它是实现这一目标的正确方法吗?还有什么需要我做的吗?

代码语言:javascript
复制
void *soilMoisture(void *vargp)
{
 sleep(10);
 funct();
 return NULL;
}

int main()
{
 pthread_t pt;
 int k=1;
 pthread_create(&pt, NULL, soilMoisture, NULL);
 while(k>0)
 {
   printf("This is the main thread (Measuring the water level) : %d\n", k);
   sleep(1);
 }
 return 0;
}

void funct()
{
 printf("******(Measuring soil moisture after sleeping for   10SEC)***********\n");
 pthread_t ptk;
 pthread_create(&ptk, NULL, soilMoisture, NULL);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-31 04:48:43

不清楚为什么每10秒创建一个新线程,而不是让原始线程继续。由于原始线程退出,所以不会直接累积线程,但不会等待它们中的任何一个,因此有一些资源未被释放。您也不是错误检查,所以您将不知道什么时候出了问题;监视将简单地停止。

无论如何,你最终都会耗尽空间。你有几个选择。

  1. 不要每10秒创建一个新线程。通过在soilMoisture()函数中创建一个循环来保持线程运行,并取消funct() --或者至少取消其中的pthread_create()调用。
  2. 如果必须创建新线程,请将它们分离。您将需要使用在pthread_attr_t中概述和链接到的函数创建一个非默认的 is not NULL

有很多问题您还没有解决,特别是两个线程之间的同步。如果您没有任何这样的同步,那么最好使用两个单独的程序--“每个程序都做一项工作,但做得很好”的Unix咒语仍然适用。你会有一个程序做土壤水分读数,另一个程序做水位读数。您需要决定数据是存储在数据库中还是以其他方式记录,以及如何保存这些数据。你需要考虑旋转原木。如果传感器断线会发生什么?如何重新启动线程或进程?如何检测线程或进程何时意外锁定或意外退出?等。

我认为问题中提到的10-15分钟与代码中10秒之间的差异严格地用于实际测试,而不是对POSIX sleep()函数的误解。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43132512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档