c语言创建一个线程,每两秒判断一个标志位是否为null
时间: 2024-10-17 14:06:55 浏览: 30
在C语言中,我们可以使用POSIX线程库(pthread)来创建一个新的线程,然后在该线程中定时检查一个标志位。下面是一个简单的示例,展示了如何做到这一点:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <time.h>
// 全局变量作为标志位
volatile int flag = NULL; // 初始化为NULL
// 线程函数
void* thread_function(void* arg) {
while (1) {
struct timespec delay;
delay.tv_sec = 2; // 设置两秒钟延迟
delay.tv_nsec = 0; // 使用秒单位,毫秒忽略
nanosleep(&delay, NULL); // 睡眠指定时间
if (flag != NULL) { // 判断标志位是否已改变
printf("Flag is not NULL.\n");
break; // 如果为非NULL则跳出循环
}
printf("Checking flag... %d seconds passed\n", time(NULL)); // 每次检查都打印当前时间
}
return NULL;
}
int main() {
pthread_t thread_id;
// 创建线程
if (pthread_create(&thread_id, NULL, thread_function, NULL)) {
perror("Error creating thread");
exit(EXIT_FAILURE);
}
// 现在主线程可以做其他事情...
// 修改标志位,模拟完成任务
flag = 1; // 设定标志位为非NULL
// 等待子线程结束
pthread_join(thread_id, NULL);
return 0;
}
```
在这个例子中,`thread_function` 是线程执行的函数,在其中通过 `nanosleep` 函数定期睡眠,并检查 `flag` 的值。如果 `flag` 变为非 `NULL`,那么线程就会停止循环并退出。
阅读全文