Is there some way to read a computer's speed and so adjust the speed with which a PowerBASIC program runs? I developed a PowerBASIC program years ago on a slow Hz computer then when I upgraded my computer to a faster Hz, I had to build in delays in order to see what was on the screen.
Announcement
Collapse
No announcement yet.
Read Computer's speed
Collapse
X
-
Not really... But there are a couple of ways that you could handle it.
You could add a "test loop" to the very beginning of your program, and use it to calibrate the rest of your loops. In other words, if the test loop runs in 5 seconds on your old computer and 1 second on your new computer (as measured with TIMER or MTIMER) then you would set a "multiplier" variable to 5 to tell all of your delay loops how long to run. The rest of your delay loops would look like this...
Code:FOR X% = 1 TO (DelayCount * Multiplier) 'WHATEVER NEXT
A much better way to "moderate" the speed of your program would be to use TIMER- or DELAY-based delays instead of loop-based delays. That way, your program would delay for a certain number of seconds or milliseconds, instead of delaying for the time it takes to execute a loop a certain number of times, because DELAY is not (very) machine-speed dependent. The resolution of DELAY/TIMER is limited to about 0.05 milliseconds, so it averages 50% of that accuarcy or about 0.1 seconds. In other words, if you write a function and tell it to delay 0.05 seconds, you will actually get a delay between 0.0 and 0.1 seconds, with an average delay of 0.05. The longer the delay, the more accurate (percentage-wise) it will be.
If your program runs on Windows computers the "ultimate" solution would be to convert it to the PowerBASIC PB/CC compiler. The Windows SLEEP function has a resolution of about 10 milliseconds (0.01 seconds), and even more accurate timing functions are available.
HTH.
-- Eric
ADDED LATER: I just re-read your message and I'm not really sure how I got the idea that you were using loop-based delays.Oh well, the info might be useful anyway...
------------------
Perfect Sync: Perfect Sync Development Tools
Email: mailto:s[email protected][email protected]</A>
[This message has been edited by Eric Pearson (edited March 17, 2000).]"Not my circus, not my monkeys."
-
There are a number of delay routines in the ABC Archives.
http://www.basicguru.com/abc
Do a search on topics:TIMERS, DELAYS, SPEED and see what you get.
------------------
Walt Decker
Comment
-
Karl --
> Does this hold true if you boot-up in MSDOS mode?
Which part are you asking about?
If you're asking about Windows "fooling you", then No. If you boot into the MS-DOS mode, Windows is virtually 100% out of the picture, so as far as I know apps will run at a constant speed (ignoring disk/network access delays, etc.). And PB/CC console applications can't be run in that mode... they require that Windows be running.
-- Eric
------------------
Perfect Sync: Perfect Sync Development Tools
Email: mailto:[email protected][email protected]</A>
[This message has been edited by Eric Pearson (edited March 18, 2000).]"Not my circus, not my monkeys."
Comment
-
All
I think we have missed the point I raised, namely, is there some way to read the computer's speed. I would like to include it in the program so the program will make the appropriate adjustment.
I am in the process of developing programs that I hope to market and I will need to have them run on various speed computers.
Fred
------------------
Comment
-
Fred --
> I think we have missed the point I raised, namely,
> is there some way to read the computer's speed.
Actually, I think you missed the answer.The answer is No. PCs do not provide any sort of hook, interrupt, API, or anything else that returns the processor speed. Even if they did, it would be meaningless on Windows computers for the reasons that I outlined.
I stand by my previous response: "Not really... But there are a couple of ways that you could handle it."
-- Eric
------------------
Perfect Sync: Perfect Sync Development Tools
Email: mailto:[email protected][email protected]</A>
"Not my circus, not my monkeys."
Comment
-
Heck if I know!
That "CPU Speed" string that you see on bootup is probably hard-coded into the chip's startup code for display puposes. But that doesn't mean that a hook/interrupt/API/etc. is provided to return that string (or the "speed" part of it) to a program. In other words, just because you can do this in a PB program...
Code:PRINT "This is version 1.00 of my program"
I honestly don't know the answer, but I'm 99.9999% certain that IBM-compatible computers do not provide a method for applications to obtain the "CPU Speed" number at runtime.
-- Eric
------------------
Perfect Sync: Perfect Sync Development Tools
Email: mailto:[email protected][email protected]</A>
"Not my circus, not my monkeys."
Comment
-
Code:Eric is right. No CPU will report its own speed. That's because the reliable speed of a CPU isn't known until it's tested after being manufactured. If the 450Mhz chip performs reliably at 450 Mhz, it's stamped as such and priced accordingly. If the same chip tests out at 400Mhz or 350Mhz, then it's sold as a 400Mhz or 350Mhz. Pentium-class and later CPUs will return their features through the CPUID function (the manufacturer's name, MMX or not, etc.), but never the processor's speed. To determine speed, even the BIOS does what your program has to do: It tests the CPU itself. This is why, if you set motherboard jumpers incorrectly, your 450Mhz PII will be reported as running at 200Mhz or some other speed--which will be correct. The motherboard will be handling the CPU incorrectly, and the speed reported will tell you that's happening. (Of course, if the jumpers are correct, then you'll know that your new CPU is probably remarked--a lower-speed chip remarked as higher speed by the crook who sold it).
------------------
-- Greg
[email protected]
Comment
-
Dear Fred
have a look at the url http://members.xoom.com/B_coolWare/
you will find very reliable code in c and pascal for reading all cpu types and speed
also he provides com and exe programs whick can pie output to text file fro reading into dos
I have used this method for 3 years on over 700 pcs on most makes
hope this helps
ron hurley
[email protected]
------------------
Comment
Comment