创建线程调用函数运行完之后如何在调用的函数中停止或取消线程C语言demo
时间: 2024-02-12 13:06:57 浏览: 110
Go语言使用cgo嵌套C语言函数调用demo.zip
下面是一个简单的C语言demo,演示了如何在线程函数中使用线程取消机制终止线程的执行:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
void *thread_func(void *arg)
{
int i;
// 设置线程的取消状态为PTHREAD_CANCEL_ENABLE
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
for (i = 0; i < 10; i++) {
printf("Thread running %d\n", i);
sleep(1);
// 检测是否有取消请求
pthread_testcancel();
}
printf("Thread finished\n");
// 终止线程
pthread_exit(NULL);
}
int main()
{
pthread_t thread;
int ret;
// 创建线程
ret = pthread_create(&thread, NULL, thread_func, NULL);
if (ret != 0) {
fprintf(stderr, "Failed to create thread\n");
exit(1);
}
// 等待一段时间后取消线程
sleep(5);
pthread_cancel(thread);
// 等待线程结束
pthread_join(thread, NULL);
printf("Thread joined\n");
return 0;
}
```
在上面的例子中,我们首先创建了一个线程,并在线程函数中设置了线程的取消状态为`PTHREAD_CANCEL_ENABLE`。然后,在循环中使用`pthread_testcancel`函数检测是否有取消请求,如果有则终止线程的执行。在主函数中,等待一段时间后调用`pthread_cancel`函数取消线程的执行,并且使用`pthread_join`函数等待线程结束。当线程结束后,程序输出"Thread joined"。
阅读全文