<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Framerate questions</title>
		<link>http://www.allegro.cc/forums/view/589659</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 26 Jan 2007 08:29:57 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Greetings again! Since my last post I found an index online with all the GNU standard C libraries and gave myself a crash course in using them. I reformatted my attendance program to use standard functions instead of Borland&#39;s, so now it works in all my compilers. Now I&#39;ve begun work on the game I&#39;m planning and have run into a problem: how do I maintain a set frame rate? I looked through the example programs and found one that uses the rest_callback() function, but it still fluctuates between 87 and 93 fps when I pass a value of 8. </p><p>First off: will a fluctuation like this affect the way my game plays (or looks?) if so, is there another way to fix it? I tried using the clock() function to check to make sure a certain number of milliseconds had passed since the beginning of the game loop, with an empty while{} loop iterating indefinitely until it passed that number, and had some success. It wasn&#39;t perfect, but it was only 26 seconds off what it should have been after 10 minutes, which I thought was a success, until I opened my task manager and realized it was using 100% CPU that whole time (duh!)</p><p>So what do you all usually do to ensure a good rate of timing for your game? I had planned to use the fact that the game only iterates X times per second to modify timer variables (i.e. a 10 second effect should start at 600, if running at 60 fps, then subtract 1 during each iteration) but if the fps doesn&#39;t remain static, then this won&#39;t be accurate (assuming I use numbers large enough that it would have an impact, if it&#39;s 5 minutes off after 30 minutes, that could cause problems)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Fasine)</author>
		<pubDate>Sun, 21 Jan 2007 14:26:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>well, don&#39;t you use allegro? there&#39;s alot of handy timing functions for allegro.</p><p>i don&#39;t like having the graphics routine executed more times than necessary so heres what i do when vsync isn&#39;t involved:</p><p>make a function.<br />void blabla_timer();</p><p>install the allegro timer functions.<br />install_timer();</p><p>lock the variables changed by the timer.<br />LOCK_VARIABLE(blabla_timer);</p><p>lock the function thats going to be executed by the timer.<br />LOCK_FUNCTION(blabla_timer);</p><p>Then start the timer, and it can be done in many ways:</p><p>install_int(blabla_timer, 1); specify the delay in milliseconds.&#39;<br />install_int_ex(blabla_timer,BPS_TO_TIMER(75)); runs 75 times per second,<br />so install_int_ex(blabla_timer,BPS_TO_TIMER(sfps));</p><p>read here for a more detailed version &quot;<a href="http://allegro.cc/manual/api/timer-routines/install_int_ex">http://allegro.cc/manual/api/timer-routines/install_int_ex</a>&quot;</p><p>Then you can probably figure the rest out yourself <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /></p><p>Read this: &quot;<a href="http://allegro.cc/manual/api/timer-routines/">http://allegro.cc/manual/api/timer-routines/</a>&quot;
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Albin Engström)</author>
		<pubDate>Sun, 21 Jan 2007 15:42:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here&#39;s another thread that goes over this<br /><a href="http://www.allegro.cc/forums/thread/589396">http://www.allegro.cc/forums/thread/589396</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ninkazu)</author>
		<pubDate>Sun, 21 Jan 2007 22:29:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><a href="http://www.allegro.cc/forums/thread/585140">http://www.allegro.cc/forums/thread/585140</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Mon, 22 Jan 2007 02:41:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Alright, I don&#39;t think I&#39;m doing this properly. When I use the interrupt handler, the program runs at 100% CPU, which I assume is caused by the rest(0) command, which is alright, since it gives any leftover CPU to other processes, but is that normal? Also, it executes at 80 frames per second regardless of the value I pass to BPS_TO_TIMER(). I tried from 30 to 70 and it all ran at between 76 and 83. Additionally, at the end of the program I call a function to set a flag equal to the amount of time left (17 - amountoftimepassed) for each loop, and it was returning numbers between 17 and -14. Meaning some loops executed in less than 1ms and others took 31ms. Am I doing something wrong here? The interrupt handler and its declarations are here.
</p><div class="source-code snippet"><div class="inner"><pre>    <span class="c">//interrupt function (should I put something else here?)</span>
    <span class="k1">void</span> interrupt<span class="k2">(</span><span class="k2">)</span>
    <span class="k2">{</span>
         <a href="http://www.allegro.cc/manual/rest" target="_blank"><span class="a">rest</span></a><span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
    <span class="k2">}</span>
<span class="c">//then main begins...</span>
    <a href="http://www.allegro.cc/manual/install_timer" target="_blank"><span class="a">install_timer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
    <a href="http://www.allegro.cc/manual/install_int_ex" target="_blank"><span class="a">install_int_ex</span></a><span class="k2">(</span>interrupt, BPS_TO_TIMER<span class="k2">(</span><span class="n">30</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
    <a href="http://www.allegro.cc/manual/LOCK_FUNCTION" target="_blank"><span class="a">LOCK_FUNCTION</span></a><span class="k2">(</span>interrupt<span class="k2">)</span><span class="k2">;</span>
<span class="c">//I don't lock any variables since the timer function uses none.</span>
</pre></div></div><p>

And at the bottom is the full source of the program I&#39;m working with, 95 lines or so. Not huge, but you may not need to wade through it to answer my question either.</p><p>One additional question: when I compile my program, it brings up two windows, the traditional C++ window that is used for text programs in addition to a Windows-style window that contains all the graphics and stuff I&#39;m executing. It&#39;s not a problem since they both close together and whatnot, but I know there&#39;s a way to keep that from happening as well. Can anyone fill me in? Thanks a ton for your replies!</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#include &lt;cstdlib&gt;</span></td></tr><tr><td class="number">2</td><td><span class="p">#define ALLEGRO_STATICLINK</span></td></tr><tr><td class="number">3</td><td><span class="p">#include "allegro.h"</span></td></tr><tr><td class="number">4</td><td>&#160;</td></tr><tr><td class="number">5</td><td>    <span class="c">//declare bitmaps</span></td></tr><tr><td class="number">6</td><td>    <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>buffer<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>    <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>background<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>    </td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</td><td>    <span class="k1">int</span> count<span class="k3">=</span><span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>    <span class="k1">int</span> interval<span class="k3">=</span><span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>    <span class="k1">int</span> timebuffer<span class="k3">=</span><span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>    <span class="k1">volatile</span> <span class="k1">int</span> framerate<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>    <span class="k1">volatile</span> <span class="k1">int</span> timer<span class="k3">=</span><span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>    <span class="k1">int</span> timepassed<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>    </td></tr><tr><td class="number">17</td><td>    <span class="c">//define some colors for use later on.</span></td></tr><tr><td class="number">18</td><td><span class="p">#define BLACK makecol(0,0,0)</span></td></tr><tr><td class="number">19</td><td><span class="p">#define WHITE makecol(255,255,255)</span></td></tr><tr><td class="number">20</td><td>    </td></tr><tr><td class="number">21</td><td>&#160;</td></tr><tr><td class="number">22</td><td>   <span class="c">//background image is drawn to the buffer, then debug messages are drawn on top.</span></td></tr><tr><td class="number">23</td><td>   <span class="k1">void</span> drawbuffer<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span></td></tr><tr><td class="number">24</td><td>   <span class="k2">{</span></td></tr><tr><td class="number">25</td><td>       <a href="http://www.allegro.cc/manual/acquire_bitmap" target="_blank"><span class="a">acquire_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>       <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>background, buffer, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">1200</span>, <span class="n">800</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>       <a href="http://www.allegro.cc/manual/release_bitmap" target="_blank"><span class="a">release_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>       <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>buffer,<a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>,<span class="n">20</span>,<span class="n">10</span>,BLACK,<span class="k3">-</span><span class="n">1</span>, <span class="s">"Framerate: %i"</span>, framerate<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>       <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>buffer,<a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>,<span class="n">20</span>,<span class="n">22</span>,BLACK,<span class="k3">-</span><span class="n">1</span>, <span class="s">"Time Buffer: %i"</span>, timepassed<span class="k2">)</span><span class="k2">;</span>   </td></tr><tr><td class="number">30</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">31</td><td>   </td></tr><tr><td class="number">32</td><td>   <span class="c">//screen is acquired and buffer is blitted to it.</span></td></tr><tr><td class="number">33</td><td>   <span class="k1">void</span> drawscreen<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span></td></tr><tr><td class="number">34</td><td>   <span class="k2">{</span></td></tr><tr><td class="number">35</td><td>   <a href="http://www.allegro.cc/manual/acquire_screen" target="_blank"><span class="a">acquire_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td>   <a href="http://www.allegro.cc/manual/scare_mouse" target="_blank"><span class="a">scare_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>  </td></tr><tr><td class="number">37</td><td>   <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">1200</span>, <span class="n">800</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td>   <a href="http://www.allegro.cc/manual/release_screen" target="_blank"><span class="a">release_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">39</td><td>   <a href="http://www.allegro.cc/manual/unscare_mouse" target="_blank"><span class="a">unscare_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td><span class="k2">}</span></td></tr><tr><td class="number">41</td><td>    </td></tr><tr><td class="number">42</td><td>    <span class="c">//interrupt function (should I put something else here?)</span></td></tr><tr><td class="number">43</td><td>    <span class="k1">void</span> interrupt<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">44</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">45</td><td>         <a href="http://www.allegro.cc/manual/rest" target="_blank"><span class="a">rest</span></a><span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">46</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">47</td><td>    </td></tr><tr><td class="number">48</td><td>    </td></tr><tr><td class="number">49</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">50</td><td><span class="k2">{</span></td></tr><tr><td class="number">51</td><td>    <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">52</td><td>    <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">53</td><td>    <a href="http://www.allegro.cc/manual/install_timer" target="_blank"><span class="a">install_timer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">54</td><td>    <span class="c">//install_int_ex(timer1, BPS_TO_TIMER(60));</span></td></tr><tr><td class="number">55</td><td>    <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span><span class="n">16</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">56</td><td>    <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_AUTODETECT_WINDOWED, <span class="n">1200</span>, <span class="n">800</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">57</td><td>    </td></tr><tr><td class="number">58</td><td>    <span class="c">//install interrupt</span></td></tr><tr><td class="number">59</td><td>    <a href="http://www.allegro.cc/manual/install_int_ex" target="_blank"><span class="a">install_int_ex</span></a><span class="k2">(</span>interrupt, BPS_TO_TIMER<span class="k2">(</span><span class="n">30</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">60</td><td>    <a href="http://www.allegro.cc/manual/LOCK_FUNCTION" target="_blank"><span class="a">LOCK_FUNCTION</span></a><span class="k2">(</span>interrupt<span class="k2">)</span><span class="k2">;</span>  </td></tr><tr><td class="number">61</td><td>&#160;</td></tr><tr><td class="number">62</td><td>    <span class="c">//create bitmaps</span></td></tr><tr><td class="number">63</td><td>    buffer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span><span class="n">1600</span>, <span class="n">1250</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">64</td><td>    background <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"grass.bmp"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">65</td><td>    </td></tr><tr><td class="number">66</td><td>    <span class="c">//set this variable for timing the framerate later in the loop</span></td></tr><tr><td class="number">67</td><td>    interval <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_103.html" target="_blank">clock</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">68</td><td>    timebuffer <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_103.html" target="_blank">clock</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">69</td><td>    </td></tr><tr><td class="number">70</td><td>    <span class="k1">while</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/keypressed" target="_blank"><span class="a">keypressed</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">71</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">72</td><td>    count<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">73</td><td>    <span class="c">//sets framerate variable for use in the debug display</span></td></tr><tr><td class="number">74</td><td>    <span class="k1">if</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_103.html" target="_blank">clock</a><span class="k2">(</span><span class="k2">)</span> <span class="k3">-</span> interval <span class="k3">&gt;</span> <span class="n">1000</span><span class="k2">)</span></td></tr><tr><td class="number">75</td><td>             <span class="k2">{</span></td></tr><tr><td class="number">76</td><td>             interval <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_103.html" target="_blank">clock</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">77</td><td>             framerate <span class="k3">=</span> count<span class="k2">;</span></td></tr><tr><td class="number">78</td><td>             count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">79</td><td>             <span class="k2">}</span></td></tr><tr><td class="number">80</td><td>             </td></tr><tr><td class="number">81</td><td>             <span class="c">//used to find number of milliseconds left when loop is finished</span></td></tr><tr><td class="number">82</td><td>             timer <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_103.html" target="_blank">clock</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">83</td><td>             </td></tr><tr><td class="number">84</td><td>             <span class="c">//bitmap is blitted to the buffer, along with debug messages </span></td></tr><tr><td class="number">85</td><td>             <span class="c">//then the buffer is blitted to the screen.</span></td></tr><tr><td class="number">86</td><td>             drawbuffer<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">87</td><td>             drawscreen<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">88</td><td>             </td></tr><tr><td class="number">89</td><td>             <span class="c">//stores the amount of time that has passed for displaying as a debug message</span></td></tr><tr><td class="number">90</td><td>             <span class="k1">if</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_103.html" target="_blank">clock</a><span class="k2">(</span><span class="k2">)</span> <span class="k3">-</span> timebuffer <span class="k3">&gt;</span> <span class="n">1000</span><span class="k2">)</span></td></tr><tr><td class="number">91</td><td>             <span class="k2">{</span></td></tr><tr><td class="number">92</td><td>             timepassed <span class="k3">=</span> <span class="n">17</span> <span class="k3">-</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_103.html" target="_blank">clock</a><span class="k2">(</span><span class="k2">)</span> <span class="k3">-</span> timer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">93</td><td>             timebuffer <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_103.html" target="_blank">clock</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">94</td><td>             <span class="k2">}</span></td></tr><tr><td class="number">95</td><td>             </td></tr><tr><td class="number">96</td><td>             <span class="c">//This is the timer system I was using before</span></td></tr><tr><td class="number">97</td><td>             <span class="c">//if 17 milliseconds haven't passed since the beginning of the loop, this loop delays it             </span></td></tr><tr><td class="number">98</td><td>             <span class="c">/*while(clock() - timer &lt; 17)</span></td></tr><tr><td class="number">99</td><td><span class="c">             {</span></td></tr><tr><td class="number">100</td><td><span class="c">             rest(1);</span></td></tr><tr><td class="number">101</td><td><span class="c">             }*/</span></td></tr><tr><td class="number">102</td><td><span class="k2">}</span>    </td></tr><tr><td class="number">103</td><td><span class="k2">}</span></td></tr><tr><td class="number">104</td><td><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Fasine)</author>
		<pubDate>Fri, 26 Jan 2007 04:40:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>your extra window is because you have your compiler set as a console app.</p><p>acquire_bitmap serves no purpose for single lines of code, and should only be used for memory buffers.</p><p>I have no comment on the rest of the code, save there are much much easier and better ways of handing framerate than what you&#39;re doing <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Fri, 26 Jan 2007 05:22:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
I have no comment on the rest of the code, save there are much much easier and better ways of handing framerate than what you&#39;re doing <br /> <br />Neil.
</p></div></div><p>

Well in that code I used one of the allegro commands that&#39;s supposed to set the framerate to a certain number of frames per second (install_int_ex(interrupt, BPS_TO_TIMER(30)) and it didn&#39;t, so I&#39;m not sure what else to do. I don&#39;t fully understand how the interrupt timers work though, so it&#39;s entirely possible I could be doing this wrong. I&#39;m assuming it just waits to reiterate the program until a certain amount of time has passed, but I&#39;m not sure why this function isn&#39;t working properly...</p><p><b>************************Scratch all that!</b>****************************</p><p>I figured it out: the timer function runs on a separate thread (basically as if it were a separate program altogether) and iterates itself at the intervals you pass to it in the install_int command. This is what I have and it now works:</p><div class="source-code snippet"><div class="inner"><pre>    <span class="k1">void</span> interrupt<span class="k2">(</span><span class="k2">)</span>
    <span class="k2">{</span>
         counter<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
    <span class="k2">}</span>
    <a href="http://www.allegro.cc/manual/END_OF_FUNCTION" target="_blank"><span class="a">END_OF_FUNCTION</span></a><span class="k2">(</span>interrupt<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

then at the beginning of the main loop, I set a flag variable equal to counter, then check at the end of the loop to see if they are still equal and uses a while() loop to rest(0) until they&#39;re different. If the interrupt has been iterated since the beginning of the loop, they won&#39;t be equal and the program will proceed, setting the flag variable equal to counter again when it begins once more. I thought the interrupt commands were supposed to delay your program until the predetermined amount of time had passed before starting over, but you apparently have to work with them a little. And now we know! =)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Fasine)</author>
		<pubDate>Fri, 26 Jan 2007 08:29:57 +0000</pubDate>
	</item>
</rss>
