在C语言中,设置函数超时可以通过多线程实现。一个简单的方法是使用pthread库创建一个单独的线程来执行函数,并使用互斥锁和条件变量来同步线程。以下是一个示例代码:
#include<stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <stdbool.h>
#define TIMEOUT_SECONDS 5
void *functionToTimeout(void *arg) {
// 在这里执行你的函数
int result = 0;
for (int i = 0; i < 1e9; i++) {
result += i;
}
printf("Function completed with result: %d\n", result);
// 释放互斥锁
pthread_mutex_lock(&mutex);
isFunctionCompleted = true;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
return NULL;
}
int main() {
pthread_t thread;
pthread_mutex_init(&mutex, NULL);
pthread_cond_init(&cond, NULL);
isFunctionCompleted = false;
// 创建新线程并执行函数
pthread_create(&thread, NULL, functionToTimeout, NULL);
// 等待函数完成或超时
pthread_mutex_lock(&mutex);
if (!isFunctionCompleted) {
struct timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
ts.tv_sec += TIMEOUT_SECONDS;
pthread_cond_timedwait(&cond, &mutex, &ts);
}
pthread_mutex_unlock(&mutex);
// 检查函数是否已完成
if (!isFunctionCompleted) {
printf("Function timed out after %d seconds\n", TIMEOUT_SECONDS);
// 取消线程
pthread_cancel(thread);
}
// 清理
pthread_join(thread, NULL);
pthread_mutex_destroy(&mutex);
pthread_cond_destroy(&cond);
return 0;
}
在这个示例中,我们创建了一个名为functionToTimeout
的线程来执行我们的函数。我们使用互斥锁mutex
和条件变量cond
来同步线程。如果函数在指定的超时时间内完成,它将释放互斥锁并发送信号。如果函数未在超时时间内完成,主线程将取消函数执行线程并退出。
请注意,这个示例仅用于演示目的,实际应用中可能需要更多的错误处理和资源管理。
领取专属 10元无门槛券
手把手带您无忧上云