C语言中,对一段函数进行超时判断,请问怎么实现?

windows下的C语言编程,需要对一段第三方dll中的函数进行超时控制,参考了很多种技术都没实现,请问该如何解决。
先说说我想到的东西:
1.中的alarm,这玩意儿在Linux下有效,在Windows中无法使用,即使我用的MinGW标准gcc编译器。
2.中的timeSetEvent,配合中的setjmp和longjmp,这个是最接近的,可惜运行到超时时中断是中断了,可是一直会弹窗报错,不知道为什么。
我在下面的评论中把第二个思路的代码贴出来,再截一个弹窗报警的图。
请教C语言和Win32API高手帮忙看看。

 作者:丁丁
链接:https://www.zhihu.com/question/49052307/answer/113997254
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <setjmp.h>

jmp_buf j;

/**
 * 时间中断函数
 */
void PASCAL OneMilliSecondProc(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dwl, DWORD dw2) {
    printf("Timout!\n");
    longjmp(j,1);
}

int longTimeFunction(){
    while (1) {
        printf("operating...\n");
        Sleep(1000);
    }

    return 0;
}


int main(){
    HANDLE hHandle;

    UINT wTimerRes_1ms;//定义时间间隔
    UINT wAccuracy; //定义分辨率
    UINT TimerID_1ms; //定义定时器句柄
    wTimerRes_1ms = 5000;
    if((TimerID_1ms = timeSetEvent(
                          wTimerRes_1ms,
                          wAccuracy,
                          (LPTIMECALLBACK)OneMilliSecondProc, // 回调函数
                          (DWORD)(1), // 用户传送到回调函数的数据;
                          TIME_PERIODIC//周期调用定时处理函数
                      )) == 0) {
        printf("start!!!!!!!!!!!\n");
    } else {
        printf("end!!!!!!!!!!!\n");
    }

    int temp = 0;
    if(setjmp(j) == 0){
        temp = longTimeFunction();
    }else{
        printf("xxxxxx...\n");
        temp = -1;
    }

    printf("%d\n", temp);

    return 0;
}

图片说明

2个回答

在win32里,可以使用SetTimer很方便,也可以自己封装一个定时器类做处理
可参考:http://blog.csdn.net/nancy_m/article/details/8542165

超时判断一般都是做一个定时器就好啦!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

3
用C语言实现一个函数,判断两个IP是否在同一个网段
1
怎么在vb编程语言系统中调用从java中产生的tofix函数来实现精度判断?
2
请问各位大神 C语言取余函数有哪些?
2
mid函数在vb语言中的反函数是什么定义?函数的名称和参数的使用是怎么样实现的
2
怎么在函数中判断中断执行并且把调用指向另一个函数,根据函数名的判断?
2
请问vb调用函数中加上一个判断提前结束函数并且把另一个函数作为继续传入调用怎么实现?
2
先调用函数,再在函数里改变函数调用能否实现?
2
函数切换在vb6.0中文系统使用什么语句实现的,界面上不判断函数,函数自己判断切换?
2
请问怎么在vb编程语言中实现不通过界面就可以切换调用的函数名?
2
vb编程语言中实现启动项目从下拉中添加自己的函数,怎么实现?
2
python networkx 有没有函数可以实现 判断一个无向图中两个结点是否连通
1
请问在vb6.0中文编程语言平台上,ctype函数是怎么进行界面控件类型的判断和转换的?
1
怎么在c语言中画出函数图
1
c语言在子函数中malloc后想要将malloc的数组输出,该怎么做?
6
请问C语言中有Precede和Operate函数吗?
3
python的一段代码,main函数里面的内容不运行,怎么回事?
4
C语言中的清屏函数怎么写
2
C语言系统登录中,密码加密函数中调用其他函数
3
C语言调用Windows API 函数micSendString()函数
0
请问C++语言运用模板的方式实现复数运算的运算符和函数的重载实现?