做个for()1-100000不过跟sleep()没区别
做个线程在用sleep()会很不错的

解决方案 »

  1.   

    再线程里,设置优先级不就行了,也可同时用sleep
    void sqrt()
    {
        if(!(--i % 100))
            sleep(10);
        else
            if(i>=2)
                sqrt();
    }
    //ok?
      

  2.   

    应该有吧,你看看这个行不行
    ----  这 段 程 序 的 主 要 功 能 是: 设 置 两 个 时 钟 定 时 器, 一 个 间 隔 是1 毫 秒, 一 个 间 隔 是2 秒, 每 执 行 一 次, 输 出 当 前 系 统 时 钟 值 到 文 件“cure.out”, 以 比 较 此 定 时 器 的 精 确 度。( 此 程 序 在 中 文windows95 及Microsoft VC5.0 编 译 通 过。 只 节 取 与 定 时 器 有 关 的 部 分 程 序。) #include < stdio.h >
    //包含所用系统函数的头文件, 
    如果编译有问题,可调整此语句的位置
    #include < mmsystem.h >//定义1毫秒和2秒时钟间隔,以毫秒为单位
    #define ONE_MILLI_SECOND1
    #define TWO_SECOND 2000
    //定义时钟分辨率,以毫秒为单位
    #define TIMER_ACCURACY1UINT wTimerRes_1ms,wTimerRes_2s;  //定义时间间隔
    UINT wAccuracy;//定义分辨率
    UINT TimerID_1ms,TimerID_2s;//定义定时器句柄CCureApp::CCureApp()
    :  fout("cure.out", ios::out)//打开输出文件“cure.out”
    {
    // TODO: add construction code here,
    // Place all significant 
           initialization in InitInstance
    //给时间间隔变量赋值
    wTimerRes_1ms = ONE_MILLI_SECOND ;
    wTimerRes_2s = TWO_SECOND;

    TIMECAPS  tc;
    //通过函数timeGetDevCaps取出系统
    的分辨率取值范围(对intel系统,
    1~16毫秒),//如果无错则继续
    if(timeGetDevCaps(&tc, sizeof(TIMECAPS)) 
    == TIMERR_NOERROR)
    {
    //分辨率的值不能超出系统的取值范围
    wAccuracy = min(max(tc.wPeriodMin, 
    TIMER_ACCURACY),tc.wPeriodMax);
    //调用timeBeginPeriod函数设置定时器
    的分辨率,类似于for循环的步长
    timeBeginPeriod(wAccuracy);
    //设置定时器
    InitializeTimer();
    }
    }CCureApp::~CCureApp()
    {
    //结束时钟
    fout < <  "结束时钟" < <  endl;
    //删除两个定时器
    timeKillEvent(TimerID_1ms);
    timeKillEvent(TimerID_2s);
    //删除设置的分辨率
    timeEndPeriod(wAccuracy);
    }
    注:使用完的定时器及分辨率一定
    要删除,否则系统会越来越慢。void CCureApp::InitializeTimer()
    {
    StartOneMilliSecondTimer();
    StartTwoSecondTimer();
    }//一毫秒定时器的回调函数,
    类似于中断处理程序
    voidPASCAL//一定要声明为全局PASCAL函数,
    否则编译会有问题
    OneMilliSecondProc(UINT wTimerID, UINT msg,
    DWORD dwUser, DWORD dw1, DWORD dw2)
    {
    static int ms = 0;//定义计数器
    CCureApp *app = (CCureApp *)dwUser;
    //取得系统时间以毫秒为单位
    DWORD osBinaryTime = GetTickCount();
    //输出计数器值和当前系统时间到文件 
    app- >fout < <  ++ms < <  ": 1ms : "
     < <  osBinaryTime < <  endl;
    }//加装1毫秒定时器
    void  CCureApp::StartOneMilliSecondTimer()
    {
    if((TimerID_1ms = timeSetEvent(wTimerRes_1ms, wAccuracy,
     (LPTIMECALLBACK) OneMilliSecondProc,//回调函数
     (DWORD)this,//用户自传送到回调函数的数据
    /*周期调用,只使用一次用TIME_ONESHOT*/
    TIME_PERIODIC)) == 0)
    {
    AfxMessageBox("不能计时", MB_OK | MB_ICONASTERISK);
    }
    else//不等于0表明加装成功, 
    返回此定时器的句柄
    fout < <  "16ms计时:" < <  endl;
    }以下为2秒定时器的回调函
    数和加装函数,与1毫秒的类似;
    void  PASCAL
    TwoSecondProc(UINT wTimerID, UINT msg,
      DWORD dwUser, DWORD dw1, DWORD dw2)
    {
    static int s = 0;
    CCureApp *app = (CCureApp *)dwUser;
    DWORD osBinaryTime = GetTickCount(); 
    app- >fout < <  "***********************
    ***********************" < <  endl;
    app- >fout < <  ++s < <  ": 2s : "
     < <  osBinaryTime < <  endl;
    }void CCureApp::StartTwoSecondTimer()
    {
    if((TimerID_2s = timeSetEvent(wTimerRes_2s, wAccuracy,
     (LPTIMECALLBACK) TwoSecondProc,
     (DWORD)this,
      TIME_PERIODIC)) == 0)
    {
    AfxMessageBox("不能计时", MB_OK | MB_ICONASTERISK);
    }
    else
    fout < <  "2s计时:" < <  endl;
    }
      

  3.   

    Re:SunLord(鸿);
    在对话框程序中,用Sleep函数,会产生类似停止相应的现象,比如此时我要
    刷新一下视图区的图像。所以我会和sleep过不去
      

  4.   

    在VC++Net中有一个struct __timeb64可以精确到毫秒级,将下列函数插入你的程序中如何:
    _int64 iBeg,iEnd,iSpan=你要的时间间隔;
    struct __timeb64 timeptr;
    ::_ftime64(&timeptr);
    iBeg = (timeptr.time+timeptr.timezone*60*1000+timeptr.millitm;
    iEnd = iBeg;
    while(iEnd-iBeg<iSpan)
    {
        ::_ftime64(&timeptr);
        iEnd = (timeptr.time+timeptr.timezone*60*1000+timeptr.millitm;
    }在vc6.0我只知道又一个类型time_t,只能精确到秒级,实现方法一样,如有谁知道什么函数能精确到毫秒级请告诉我。
      

  5.   

    cjfwll(稻草人※寻觅) 的方法好像很好,还没仔细研究。^_^
      

  6.   

    Re: SunLord(鸿)
    你所提供的方法大概会和Sleep函数有怎样的不同呢?
      

  7.   

    假如有一个递归算法,我想表现这个算法的计算过程,比如说利用WM_TIMER消息
    来控制递归算法的速度,或者有没可以实现的方案?利用Sleep()的方法除外。
    int i = 1000;
    void sqort()
    {
    i --;
    if(i<2)goto end;
    sqort();
    end:;
    }因为递归调用的次数自己是函数调用时自己决定的,我只需调用一次就可以了
    但在递归函数内部自身的多次调用时无法控制的。
      

  8.   

    用独立的线程运算对你的对话框不会有任何影响,用定时器给线程发送暂停通知,就行了,降一下运算thread的优先级,低于normal,这样不会影响任何操作,你不需要Sleep函数,试试WaitSingleObject和SetEvent,定时可到1/1000秒