|
|
1.1 root 1: /* This example illustrates the use of the following 286DOS functions:
2: * DOSTIMERSTART, DOSTIMERASYNC, DOSTIMERSTOP, DOSSLEEP
3: *
4: * Copyright (C) Microsoft Corp. 1986
5: */
6:
7: #include <doscalls.h> /* contains 286DOS function declarations */
8:
9: #define SEMNAME "\\SEM\\SOMESEM" /* name of semaphore */
10: #define NOEXCLUSIVE 1 /* ownership of semaphore not exclusive */
11: #define TIMERINTERVAL 1000L /* timer interval */
12: #define ASYNCINTERVAL 2000 /* asynchronous timer interval */
13: #define NOTIMEOUT -1 /* no timeout */
14: #define BEEPFREQUENCY 400 /* frequency parameter to DOSBEEP */
15: #define BEEPDURATION 50 /* duration parameter to DOSBEEP */
16:
17: main ()
18: {
19: unsigned long SemHandle; /* storage for semaphore handle */
20: unsigned TimerHandle; /* handle returned by DosTimerStart*/
21:
22: /* create a system semaphore */
23: DOSCREATESEM (NOEXCLUSIVE, &SemHandle, SEMNAME);
24:
25: /*
26: * DOSTIMERSTART/STOP - these functions provide a repetitive
27: * asynchronous timer which clear a semaphore at a specified interval.
28: */
29:
30: DOSSEMSET (SemHandle); /* set the system semaphore */
31:
32: /* set the interval timer */
33: DOSTIMERSTART (TIMERINTERVAL, SemHandle, &TimerHandle);
34:
35: /* normally, application would do some work in here */
36:
37: DOSSEMWAIT (SemHandle, (long) NOTIMEOUT); /* wait on the semaphore */
38: DOSBEEP (BEEPFREQUENCY, BEEPDURATION); /* beep when done */
39: DOSTIMERSTOP (TimerHandle); /* stop the interval timer */
40:
41: /*
42: * DOSTIMERASYNC example. This function provides a one-shot
43: * asynchronous timer which clears a specified semaphore after
44: * a specified time delay.
45: */
46:
47: DOSSEMSET (SemHandle); /* set the system semaphore */
48:
49: /* start the asynchronous timer */
50: DOSTIMERASYNC ((long) ASYNCINTERVAL, SemHandle, &TimerHandle);
51:
52: /* normally, application would do some work in here */
53:
54: DOSSEMWAIT (SemHandle, (long) NOTIMEOUT); /* wait on the semaphore */
55: DOSBEEP (BEEPFREQUENCY, BEEPDURATION); /* beep when done */
56:
57: /*
58: * DOSTIMERSTOP is used to cancel either type of timer. After using
59: * this function you must put the semaphore back into a known state
60: * if you need to use it again. Example of cancelling a timer:
61: */
62:
63: DOSSEMSET (SemHandle); /* set the system semaphore */
64:
65: /* start the asynchronous timer (specify a long time) */
66: DOSTIMERASYNC ((long) (10*ASYNCINTERVAL), SemHandle, &TimerHandle);
67:
68: DOSTIMERSTOP (TimerHandle); /* stop the asynchronous timer */
69: DOSSEMCLEAR (SemHandle); /* clear the system semaphore */
70: DOSCLOSESEM (SemHandle); /* close the system semaphore */
71:
72: /*
73: * DOSSLEEP - simple synchronous suspend for specified interval.
74: */
75: DOSSLEEP(TIMERINTERVAL);
76: DOSBEEP (BEEPFREQUENCY, BEEPDURATION); /* beep when done */
77: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.