在C中使用pthread?
我正试图编写一个程序,不断地从监测水位的传感器读取数据。然后,每隔(10-15分钟)需要从其他传感器获取土壤湿度读数。我以前从未使用过POSIX pthreads。这就是我对它如何工作的概念 它似乎按照我希望的方式工作,但它是实现这一点的正确方式吗。还有什么我需要做的吗在C中使用pthread?,c,multithreading,pthreads,C,Multithreading,Pthreads,我正试图编写一个程序,不断地从监测水位的传感器读取数据。然后,每隔(10-15分钟)需要从其他传感器获取土壤湿度读数。我以前从未使用过POSIX pthreads。这就是我对它如何工作的概念 它似乎按照我希望的方式工作,但它是实现这一点的正确方式吗。还有什么我需要做的吗 void *soilMoisture(void *vargp) { sleep(10); funct(); return NULL; } int main() { pthread_t pt; int k=1; pt
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);
}
不清楚为什么每10秒创建一个新线程,而不是让原来的线程继续。由于原始线程已退出,因此您不会直接累积线程,但不会等待任何线程,因此存在一些未释放的资源。你也不会检查错误,所以你不知道什么时候出了问题;监控将简单地停止 不管怎样,你最终都会耗尽空间。你有两个选择
soilMoisture()
函数中创建一个循环来保持线程运行,并取消funct()
-或至少取消其中的pthread\u create()
调用pthread\u attr\u t
我假设问题中提到的10-15分钟和代码中的10秒之间的差异是严格用于实际测试的,而不是对POSIX
sleep()
函数的误解。谢谢,我确实删除了pthread_create(),并在soilMoisture()中添加了一个循环。我最终需要在两个线程之间进行通信,所以我不想编写单独的c程序。你还提出了其他我会记住的非常好的观点。是的,这只是为了测试,我知道POSIX sleep()函数是如何工作的。