As it is written in the
readme Excalibur was a a BlitzBasic program, typically for basic
programs is that every thing is written in as one large source file, (not
true for all modern basic programs).
One thing I have done for every version of Excalibur is to split the code up, I will explain it.
A typical basic program
looks like this, you have every thing mixed, its complicated to find
what your looking for, when every thing is mixed, and also in C there
is ways you can speed up complication time by dividing the code in
separate .c files.
When the content is split
up it looks some thing like this:
As you can see now is
easy, now is easy to find what your looking for, but when code is split up
the compiler won't find what in the other files until linking. The source won't compile
or the compiler will complain about incorrect declarations, to solve
this problems you most create .h file that defines the functions whit in the *.c
files.
This all well, blitz basic does not know about threads or task, every thing run from start to end, whit nothing running parallel, this is bad, in Excalibur you have a clock it has to update for every second, a good program should only do stuff when something happens, the program should wake up when its signaled to do something, then event routine should check what messages has been revised and act on this, well because clock interfered whit this it was no use checking for signals, and so main loop was running and wasting CPU cycles when noting new head happened, due to being single threaded.
I worked on this and by moving the code out of main application, I have made it easy to handle it all whit the clock.c file, I added a clock_proc function that should be spawned as own sub task, so that all rendering of clock was done in parallel whit main program, whit out interfering whit event loop in the main application, some extra work was need to prevent the code from rendering when window was closed, and allow it render when window was reopened, by using Mutex I fixed it so that variable whit clock.c was set on or off to allow rendering, the main event loop in clock.c was also mutex protected to so that only when variable was not being changed, it was allowed to render.
So way did I go trow all
this trouble for just a CPU parentage? Well because Excalibur is a start menu,
and its always there, you might need that percentage for your
video player so it does not skip frames, or your music, or maybe you
playing a game, I don't know but if every one wasted CPU cycles then
there wont by any left for your applications.
No comments:
Post a Comment