#include <time.h>#include <pthread.h>#include <stdio.h>/* for ETIMEDOUT */#include <errno.h>#include <string.h>pthread_mutex_t calculating = PTHREAD_MUTEX_INITIAliZER;pthread_cond_t done = PTHREAD_COND_INITIAliZER;voID *expensive_call(voID *data){ int oldtype; /* allow the thread to be killed at any time */ pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,&oldtype); /* ... calculations and expensive io here,for example: * infinitely loop */ for (;;) {} /* wake up the caller if we've completed in time */ pthread_cond_signal(&done); return NulL;}/* note: this is not thread safe as it uses a global condition/mutex */int do_or_timeout(struct timespec *max_wait){ struct timespec abs_time; pthread_t tID; int err; pthread_mutex_lock(&calculating); /* pthread cond_timeDWait expects an absolute time to wait until */ clock_gettime(CLOCK_REALTIME,&abs_time); abs_time.tv_sec += max_wait->tv_sec; abs_time.tv_nsec += max_wait->tv_nsec; pthread_create(&tID,NulL,expensive_call,NulL); /* pthread_cond_timeDWait can return spurIoUsly: this should * be in a loop for production code */ err = pthread_cond_timeDWait(&done,&calculating,&abs_time); if (err == ETIMEDOUT) fprintf(stderr,"%s: calculation timed out\n",__func__); if (!err) pthread_mutex_unlock(&calculating); return err;}int main(){ struct timespec max_wait; memset(&max_wait,sizeof(max_wait)); /* wait at most 2 seconds */ max_wait.tv_sec = 2; do_or_timeout(&max_wait); return 0;}@H_419_7@你可以在linux上编译并运行它:
$gcc test.c -pthread -lrt && ./a.outdo_or_timeout: calculation timed out@H_419_7@ 总结以上是内存溢出为你收集整理的如何在C中设置一个函数的超时?全部内容,希望文章能够帮你解决如何在C中设置一个函数的超时?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
概述我有一个要求,我必须给xx ms执行一个功能. xx ms后,我必须中止这个功能.请帮助我如何在C. 我认为最好的方法是涉及pthreads.开始可能需要在自己的线程中取消的计算,在主线程中使用pthread_cond_timedwait: #include <time.h>#include <pthread.h>#include <stdio.h>/* for ETIMEDOUT */# 我有一个要求,我必须给xx ms执行一个功能. xx ms后,我必须中止这个功能.请帮助我如何在C.解决方法 我认为最好的方法是涉及pthreads.开始可能需要在自己的线程中取消的计算,在主线程中使用pthread_cond_timeDWait:
赞
(0)
打赏
微信扫一扫
支付宝扫一扫
c – xorshift128的AVXSSE版本
上一篇
2022-06-07
objective-c – 获取mp3图片在iOS 8上崩溃,但适用于iOS 7
下一篇
2022-06-07
评论列表(0条)