⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zsleep.c

📁 dos 6.0 源代码 .对大家提高有一定的帮助。
💻 C
字号:
/*** ZSleep - causes program to _politely_ wait at least X milliseconds
 *	for DOS only; OS/2 and NT have their own methods that should
 *	be set up in ttypes.h.	The routine calculates the number of
 *	clock ticks in X milliseconds and adds the current tick value
 */

#if defined(DOS)

#include <dos.h>
#include "..\h\tools.h"

void ZSleep(long lMilliseconds);

void ZSleep(long lMilliseconds)
{
    union REGS		    inregs, outregs;
    struct SREGS	    segregs;
    flagType		    fCanIdle;
    typedef unsigned long   TIX;
    TIX			    ticks, oldticks, newticks;

    /* Locate Idle interrupt address (to see if we can call it) */

    segread(&segregs);
    inregs.h.ah = 0x35;			//Get Interrupt Vector
    inregs.h.al = 0x2f;			//Specify the interrupt we're asking for
    segregs.es = inregs.x.bx = 0;	//Clear results
    intdosx(&inregs, &outregs, &segregs);
    fCanIdle = (flagType)(segregs.es | outregs.x.bx);

    //Determine number of ticks in x milliseconds, given that there
    //are ~54.9450 millisecs/tick at 18.2 ticks/sec

    ticks = lMilliseconds * 10;
    ticks /= 549;

    //and add those ticks to the current tick count

    newticks = oldticks = *(TIX far * volatile)0x46C;
    ticks += oldticks;

    // Wait until the tick changes to past the desired value.

    do {
	if (oldticks > newticks)
	    ticks -= (oldticks - newticks);
	oldticks = newticks;

	//Note that the Idle interrupt and the Idle call are two separate items

	int86(0x28, &inregs, &outregs); //DOS Idle interrupt

	if (fCanIdle) {
	    inregs.x.ax = 0x1680; //DOS Idle call
	    int86(0x2F, &inregs, &outregs);
	    fCanIdle = (flagType) !outregs.h.al; //don't call if not supported
	}
	newticks = *(TIX far * volatile)0x46C;

    } while (ticks >= newticks);
}
#endif



#ifdef STANDALONE

#include <stdio.h>

main()
{
    puts("Waiting for 10 seconds");
    fflush(stdout);
    ZSleep(10000L);
    puts("\aWait completed");
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -