Article View: comp.os.os2
Article #1358OS2, LM squeezing those seconds?
From: Abdenacer Moussaoui
Date: Fri, 09 Mar 1990 20:59
Date: Fri, 09 Mar 1990 20:59
75 lines
3453 bytes
3453 bytes
Assumptions: The following is running on LAN Manager 1.1.
I am to build a graphic image (in Laserjet PCL) and then send it to
the printer as fast as the printer can accept it. Using the code
sample below the throughput was measured to be 25 seconds per page.
However, if I was to build the buffer into files and then replace
"PART 1 code" with "PART 1 alternate" below, such that I have two
.exe's running concurently. One exe to build buffers and queue them
in files and another that reads the files and writes to the device.
The throughput is measured to be 20 seconds per page. Why this 5
seconds improvement? I am not able to understand this, does it have
to do with how OS/2 assigns time-slices to processes? Note: letting
LM spooler do the printing instead of my second exe lead also to 20
seconds.
Previous inline timing statements in ComputeAndBuildBuffer() showed
that it takes approx. 5 seconds to compute and build a buffer for the
WHOLE image.
My question is how can I delay buidling the buffer until just before
printing (to avoid cluttering disk-space) and still achieve a
throughput of 20 seconds per page all in one *single* exe? A friend
tried to use DosWriteAsync() using two buffers instead of the
DosWrite() in the "Part 2" however without much improvements.??
Computing and printing small buffer (say 512 bytes) instead of the
whole buffer seems to lead some tiny improvements. How, can I make
use of OS/2 multitasking features (threads, etc...) to simulate
parallel computing and printing, so that 5 second computation is
almost transparent? Should ComputeAndBuildBuffer be a separate
thread?
Thanks for any info.
for (;;) {
usErrStat = PRJOB_ERROR | PRJOB_NOTIFY;
// PART 1
usBytesBuild = ComputeAndBuildBuffer( buf, NBUFSIZE ) ;
/* Done? */
if (usBytesBuild == 0)
break;
// PART 2
/* Write a block*/
while( DosWrite( hfDestination, buf, usBytesRead, & usTemp) )
{
DosSemSet( & SEMpause ) ;
usResult = DosPrintDestStatus( pDevname, vJob_id,
usErrStat, "write error" ) ;
DosSemRequest( & SEMpause, 7000L ) ;
usErrStat &= ~ PRJOB_NOTIFY; /* clear bit */
}
}
// PART 1 Alternate to substitute for PART 1 above
// hfJobDate is a handle to file contained the read to send buffer
/* Read a block */
for (; ;) {
usRC = DosRead( hfJobData, buf, NBUFSIZE, & usBytesRead );
if (!usRC) break;
DosSemSet( & SEMpause ) ;
usResult = DosPrintDestStatus( pDevname, vJob_id,
usErrStat | PRJOB_DESTPAUSED, "Read error" ) ;
DosSemRequest( & SEMpause, 7000L ) ;
}
/* Eof? */
if (usBytesRead == 0)
break;
Thank you.
--Abdenacer (nacer@hpmcaa.mcm.hp.COM)
Technical Details
Message-ID:
<10670021@hpmcaa.mcm.hp.com>Path:
arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!cs.utexas.edu!tut.cis.ohio-state.edu!ucbvax!hplabs!hp-pcd!hpmcaa!nacerShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!cs.utexas.edu!tut.cis.ohio-state.edu!ucbvax!hplabs!hp-pcd!hpmcaa!nacer From: nacer@hpmcaa.mcm.hp.com (Abdenacer Moussaoui) Newsgroups: comp.os.os2 Subject: OS2, LM squeezing those seconds? Message-ID: <10670021@hpmcaa.mcm.hp.com> Date: 9 Mar 90 20:59:36 GMT Organization: HP McMinville Division Lines: 75