我们用到多很多函数都可以设置超时,但我现在就是想弄明白,象这样的函数到底该怎么写!

解决方案 »

  1.   

    你指的是网络类的函数吧,网络类函数在等待数据的时候超时会返回,一般函数不可以的。在进行中不可以中断,或者说你也有类似要等待的功能?
    那用waitsingleobject()吧,等待一个对像,并settimer,指定时间内还没等到,就在ontimer里把等待对象的状态置为信号状态。然后就可以继续执行下去了
      

  2.   

    我的做法一般都是设置个TIMER控件呵呵
      

  3.   

    用GetTickCount();如:dwOldTime = GetTickCount();
    DoSomething();
    dwTimeElapsed = GetTickCount() – dwOldTime;
      

  4.   

    有个select函数,写socket的时候用它来判断超时,楼主可以看一下。
      

  5.   

    当你需要超时判断的时候,另起一个线程处理处理SetTimer。让他们同步进行
      

  6.   

    同5楼例子:
    #include <windows.h>
    #include <iostream.h>void SomeFunction(DWORD dwTime)
    {
    DWORD dwOldTime = GetTickCount();
    while(GetTickCount() - dwOldTime < dwTime)
    {
    cout<<"I'm running."<<endl;
    }
    cout<<"Exit."<<endl;
    }int main()
    {
    SomeFunction(1000);//1秒后退出
    return 0;
    }
      

  7.   


    同5楼#include <windows.h>
    #include <iostream.h>void SomeFunction(DWORD dwTime)
    {
    DWORD dwOldTime = GetTickCount();
    while(GetTickCount() - dwOldTime < dwTime)
    {
    cout<<"I'm running."<<endl;
    }
    cout<<"Exit."<<endl;
    }int main()
    {
    SomeFunction(1000);//1秒后退出
    return 0;
    }
      

  8.   

    我现在的问题是函数funA中需要运行一个函数funB 如果这个函数funB 没有在规定的时间内退出 则让funA返回false
    bool funA
    {
      if(时间>5s&&funB还未返回值)
       return flase
    }这样的超时函数怎么弄呢 funB是调用第三方dll的
      

  9.   

    我现在的问题是函数funA中需要运行一个函数funB 如果这个函数funB 没有在规定的时间内退出 则让funA返回false
    bool funA
    {
      if(时间>5s&&funB还未返回值)
      return flase
    }这样的超时函数怎么弄呢 funB是调用第三方dll的 
      

  10.   

    你的这个情况是对FUNCB的需求了。如果没办法修改第三方代码,那就只能控制你的funA的写法了。
    首先调用FunB修改为用多线程调用,FunA内等待他返回,如果等待超时还没返回,就强制结束这个线程,然后FunA返回false即可。仅供参考。
      

  11.   

      
    void ThreadFunc()//线程函数
    {
    funB();
    }int funA()
    {
      HANDLE hThread;
      DWORD ThreadID;
      hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunc,NULL,0,&ThreadID);
      DWORD hResult = WaitForSingleObject(hThread, 5000);//等待5秒
      if(hResult == WAIT_OBJECT_0)
      {
      //调用成功
      }
      else if (hResult == WAIT_TIMEOUT)
      {
       //超时
       }
       else
      {
       //出错
       }}