如何在C中设置一个函数的超时?

如何在C中设置一个函数的超时?,第1张

概述我有一个要求,我必须给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:
#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中设置一个函数的超时?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1253863.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存