``` task2.once(4000, [] {task1.detach()}); // task2在4000毫秒后运行一次,停止task1的工作```如何改写成C语言?
时间: 2025-01-07 18:14:46 浏览: 0
要将这段代码改写成C语言,我们需要使用一些C语言的多线程库,比如POSIX线程(pthread)。下面是一个使用pthread库实现的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
// 假设task1是一个长时间运行的任务
void* task1(void* arg) {
while (1) {
printf("task1 is running\n");
sleep(1); // 模拟task1的工作
}
return NULL;
}
// task2在4000毫秒后运行一次,停止task1的工作
void* task2(void* arg) {
sleep(4); // 等待4000毫秒
pthread_t* task1_thread = (pthread_t*)arg;
pthread_cancel(*task1_thread); // 停止task1的工作
printf("task1 has been stopped\n");
return NULL;
}
int main() {
pthread_t task1_thread, task2_thread;
// 创建task1线程
if (pthread_create(&task1_thread, NULL, task1, NULL) != 0) {
perror("Failed to create task1 thread");
return 1;
}
// 创建task2线程
if (pthread_create(&task2_thread, NULL, task2, &task1_thread) != 0) {
perror("Failed to create task2 thread");
return 1;
}
// 等待task2线程结束
if (pthread_join(task2_thread, NULL) != 0) {
perror("Failed to join task2 thread");
return 1;
}
// 等待task1线程结束
pthread_cancel(task1_thread);
pthread_join(task1_thread, NULL);
return 0;
}
```
在这个示例中,我们创建了两个线程:`task1_thread`和`task2_thread`。`task1_thread`模拟一个长时间运行的任务,而`task2_thread`在4000毫秒后运行一次,并停止`task1_thread`的工作。
阅读全文