75 lines
2.7 KiB
Plaintext
75 lines
2.7 KiB
Plaintext
Program TstLRL;
|
|
|
|
{ Example for the nwLock unit / NwTP 0.6 API. (c) 1993,1995, R.Spronk }
|
|
|
|
{ Tests the following nwLock calls: (Logical Record Locking)
|
|
|
|
LogLocalRecord
|
|
LockLogicalrecordSet
|
|
ReleaseLogicalRecord
|
|
ClearLogicalRecordSet
|
|
|
|
}
|
|
|
|
Uses nwLock; { using this unit will automatically set the locmode to 1 }
|
|
|
|
Var RecordName:string;
|
|
TimeOutTicks:word;
|
|
|
|
begin
|
|
TimeOutTicks:=360; {wait 20 seconds before locking process times out}
|
|
|
|
writeln('TSTLRL: Test of logical record locking.');
|
|
writeln(' -Start the exe on 2 or more workstations & enjoy the effect.');
|
|
writeln;
|
|
writeln('Suppose we want to perform a transaction on a file, where:');
|
|
writeln('-we want to update (read&write) Records # 123, 678 and 056.');
|
|
writeln;
|
|
writeln('To do this, this program uses logical record locking in the following manner:');
|
|
writeln('-It locks records #123,678 and 056 in Exclusive mode.');
|
|
writeln(' (denying all attempts at locking by other stations.');
|
|
|
|
{ Put the names of records-to-be-EXCLUSIVELY-locked in the 'logged record set' }
|
|
RecordName:='#123';
|
|
IF NOT LogLogicalRecord(RecordName,LD_LOG,0)
|
|
then writeln('LogRecord failed. Error# ',nwLock.result);
|
|
{ Note: The recordnames used have no linkage whatsover with physical
|
|
records. They form a logical representation of a physical record.
|
|
All processes involved in locking processes on the same data must
|
|
use the same naming convention }
|
|
RecordName:='#678';
|
|
IF NOT LogLogicalRecord(RecordName,LD_LOG,0)
|
|
then writeln('LogRecord failed. Error# ',nwLock.result);
|
|
RecordName:='#056';
|
|
IF NOT LogLogicalRecord(RecordName,LD_LOG,0)
|
|
then writeln('LogRecord failed. Error# ',nwLock.result);
|
|
|
|
{ Lock all records that are currently stored in the 'logged record set' }
|
|
writeln('Attempting to place locks on records.. ');
|
|
|
|
|
|
IF NOT LockLogicalRecordSet(LD_LOCK,TimeoutTicks)
|
|
then writeln('LockLogicalRecordSet (after TimeOut=20 sec) failed. Error# ',nwLock.result);
|
|
|
|
if nwlock.result=0 { locking of records was successful }
|
|
then begin
|
|
{ ---Update records, change records, etc.--- }
|
|
|
|
{ Readln to simulate update }
|
|
writeln('Now ''processing'' locked records. Press RETURN to release locks.');
|
|
readln;
|
|
|
|
{ Suppose we're done with record #123, but still need the other record
|
|
-unlock 1 record; keep record in log }
|
|
IF NOT ReleaseLogicalRecord('#123')
|
|
then writeln('ReleaseLogicalRecord Failed. Error# ',nwLock.result);
|
|
|
|
writeln('Now ''processing'' still locked records');
|
|
end;
|
|
|
|
{ unlock all records; clear 'logged record set' }
|
|
IF NOT ClearLogicalRecordSet
|
|
then writeln('ClearLogicalRecordSet Failed. Error# ',nwLock.result);
|
|
|
|
end.
|