Repair Delay Bug
Archives Forums/Linux Discussion/Repair Delay Bug
| ||
Whom you test the following code, then the CPU is always working at full capacity 100%.Graphics 800,600,0 While Not KeyHit(KEY_ESCAPE) DrawRect Rnd(0,800),Rnd(0,600),10,10 Flip Delay 1000 Wend Edit the following lines in: ../mod/brl.mod/system.mod/system.linux.c 1. One adds the following line: #include <unistd.h> 2. Change the following function: form: void bbSystemDelay( int millis ){ int t; t=brl_system_MilliSecs(); while (brl_system_MilliSecs()-t<millis) {} // usleep( millis/1000 ); } to: void bbSystemDelay( unsigned long millis ){ usleep( millis * 1000 ); } 3. And Build Modules. Now works delay correctly. |
| ||
The thing about usleep is that it's not a reliable way of sleeping for a specific amount of time. Often it can actually take longer than you specified for the sleep to end. It may not be a big deal for you if you don't need a very accurate delay, but it means that delay becomes somewhat useless for some tasks. Probably nanosleep is better for these tasks because it has within 10ms accuracy. |
| ||
Ok, thats right. I tested it:Strict Graphics 800,600,0 Local ts:Int While Not KeyHit(KEY_ESCAPE) ts = MilliSecs() DrawRect Rnd(0,800),Rnd(0,600),10,10 Flip '---Delay 1000--- DebugLog (1000.0/(MilliSecs() - ts)) Wend my monitor has a dissolution of 1280x1024@75 Here the output: 58.8235283 62.5000000 58.8235283 58.8235283 62.5000000 58.8235283 55.5555573 62.5000000 58.8235283 58.8235283 62.5000000 62.5000000 55.5555573 62.5000000 58.8235283 58.8235283 62.5000000 62.5000000 55.5555573 |
| ||
The delay function now repaired width nanosleep: Edit into: ../mod/brl.mod/system.mod/system.linux.c void bbSystemDelay( long millis ){ struct timeval timeout; timeout.tv_sec = millis / 1000000L; timeout.tv_usec = millis % 1000000L; select(0, NULL, NULL, NULL, &timeout); } And here: ../mod/brl.mod/system.mod/system.linux.bmx Type TLinuxSystemDriver Extends TSystemDriver ... Method Delay( millis ) bbSystemDelay( millis * 1000 ) End Method ... End Type Now, Delay is now very exact. And do not forget: Build Modules. |
| ||
The new version of BlitzMax 1.12 repairs this bug. Do can trash this thread. |