我在C中创建一个线程,在运行时检查网页上的东西。我应该关闭这个线程,或者一旦它完成执行将自动处理?
--> Imports
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
--> Start thread
pthread_t thread_id;
pthread_create(&thread_id, NULL, threadFunction, NULL);
---> Thread function
void *threadFunction(void *vargp) {
//Do something...
return NULL;
}
您不需要考虑使用pthread_cancel
,除非目标是提前结束正在运行的线程的执行。
在大多数情况下,您只是希望线程完成其工作。您通常通过使用pthread_join
与线程连接来检测线程是否已经完成。
如果你正在创建一个不期望结束的线程,或者它什么时候结束并不重要,你可以创建一个分离的线程,或者在创建后使用pthread_detach
分离它。那么,线程是不可连接的。
您的示例代码在NULL
中传递线程属性,这导致pthread_create
使用默认属性。你应该检查你的系统,但是Linux默认会创建可接合的线程。
对于大多数初学者项目,最简单的方法可能是创建可接合的线程,并在生成所有线程后让主线程调用pthread_exit
。这将等待每个派生线程在程序终止之前完成执行。
否则,如果主线程需要在线程完成后执行汇总工作,它将在每个线程上等待pthread_join
,直到所有线程都返回。在最后一个线程返回后,主线程可以做它需要做的事情,然后退出。
pthread的文档是这样说的:
线程以arg作为唯一参数执行start_routine创建。如果start_routine返回,效果就好像使用start_routine的返回值作为退出状态隐式调用pthread_exit()。请注意,最初调用main()的线程与此不同。当它从main()返回时,效果应该像使用main()的返回值作为退出状态隐式调用exit()一样。
因此不需要显式地终止线程。