home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 21
/
CD_ASCQ_21_040595.iso
/
dos
/
prg
/
pas
/
nwtp06
/
sematest.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1995-03-01
|
3KB
|
92 lines
{$X+,V-,B-}
Program SemaTest;
{ */
/* SemaTest - Tests semaphores by showing application metering example */
/* */
/* by Charles Rose */
/* */}
{ Testprogram for the nwSema unit, this version (c) 1994,1995 R.Spronk }
USES Crt,nwMisc,nwSema;
CONST
INITIAL_SEMAPHORE_VALUE=2;
WAIT_SECONDS=2;
{ Global data }
VAR openCount :Word;
semValue :Integer;
semHandle :LongInt;
done :boolean;
t :Byte;
BEGIN {main}
done := False;
{ Open Semaphore }
semValue := INITIAL_SEMAPHORE_VALUE; { Need in case we're creating the semaphore }
IF NOT OpenSemaphore( 'TestSemaphore', semValue, semHandle, openCount )
then begin
writeln('Error opening semaphore. error #',nwSema.Result);
Halt(1);
end;
{ Wait on the Semaphore (get permission to use the resource) }
IF NOT WaitOnSemaphore( semHandle, 3*18 ) { 0 = Don't wait }
then begin
if ( nwSema.Result = $FE )
then begin
writeln( 'Sorry, all of the slots for this resource are currently in use' );
halt(1);
end
else begin
writeln('WaitOnSemaphore returned eror# ',nwSema.result);
halt(1);
end;
end;
clrscr;
gotoxy(1,4);
Writeln('Testing semaphore functions.');
writeln('Workstation ',INITIAL_SEMAPHORE_VALUE+1,' that starts this testprogram');
writeln('(concurrently) will be refused access to the (imaginary) resource.');
gotoxy( 24,24 );
write( 'Press any key to exit' );
IF NOT ExamineSemaphore( semHandle, semValue, openCount )
then begin
writeln('Error while examining semaphore value. Error #',nwSema.Result);
Halt(1);
end;
{ Wait loop }
while ( NOT done )
do begin
gotoxy( 1,23 );
write( 'Semaphore Test --> Open at [',openCount,
'] stations *** Value is [',semValue,'] ');
t:=0;
While (t<100) and (not done)
do begin
delay(WAIT_SECONDS*10); { wait a while };
done:=KeyPressed;
inc(t);
end;
gotoxy( 60,23 );
write( 'Checking...' ); Delay(500); { wait half a sec }
IF NOT ExamineSemaphore( semHandle, semValue, openCount )
then writeln('ExamnineSemaphore2 error#',nwsema.result);
end;
{ Signal Semaphore (that we're through with the resource) }
SignalSemaphore( semHandle );
{ Close Semaphore }
CloseSemaphore( semHandle );
end.