<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Problem with timer - blocked to 64 FPS ?!</title>
		<link>http://www.allegro.cc/forums/view/586111</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 26 Jun 2006 21:51:54 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hello all,</p><p>I have a problem with timers and i am sure i have done a basic mistake...</p><p>I have a timer named &#39;wait_proc&#39; for the game logic. <br />I just increases the variable actual_tic (+1) every call.<br />I want it to be executed 120 times every second.</p><p>I want my program to display the game as soon as possible, but I don&#39;t need to draw it if nothing in the game logic has changed. So normally the max FPS should be 120.</p><p>I have another timer named &#39;fps_proc&#39; for the fps count, called every second, and which store the number of frames that have been counted this second.</p><p>The problem is that the display is &#39;blocked&#39; to 64 FPS. However it doesnot come from the display performance because if I force the program to draw, even if nothing in the game logic has changed, i get something like 1000 FPS !<br />Please see the code below, especially the part with the comment &quot;// DONT KNOW WHY IT IS BLOCKED TO 64 FPS&quot;</p><p>Thank you in advance ! <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>My timer installation:
</p><div class="source-code snippet"><div class="inner"><pre>  <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>
  install_allegro_gl<span class="k2">(</span><span class="k2">)</span><span class="k2">;</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_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
  <a href="http://www.allegro.cc/manual/install_mouse" target="_blank"><span class="a">install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>

  <span class="c">// Install my timers ///////////////////////////////////////////////////</span>
  <a href="http://www.allegro.cc/manual/LOCK_VARIABLE" target="_blank"><span class="a">LOCK_VARIABLE</span></a><span class="k2">(</span>fps<span class="k2">)</span><span class="k2">;</span>
  <a href="http://www.allegro.cc/manual/LOCK_VARIABLE" target="_blank"><span class="a">LOCK_VARIABLE</span></a><span class="k2">(</span>frame_count<span class="k2">)</span><span class="k2">;</span>
  <a href="http://www.allegro.cc/manual/LOCK_VARIABLE" target="_blank"><span class="a">LOCK_VARIABLE</span></a><span class="k2">(</span>actual_tic<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>fps_proc<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>wait_proc<span class="k2">)</span><span class="k2">;</span>
  <a href="http://www.allegro.cc/manual/install_int" target="_blank"><span class="a">install_int</span></a><span class="k2">(</span>fps_proc, <span class="n">1000</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>wait_proc, BPS_TO_TIMER<span class="k2">(</span><span class="n">120</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Timer code:
</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="c">/*--- Timer vars ----------------------------------------------------------*/</span></td></tr><tr><td class="number">2</td><td><span class="k1">static</span> <span class="k1">volatile</span> <span class="k1">unsigned</span> <span class="k1">int</span> fps<span class="k2">;</span></td></tr><tr><td class="number">3</td><td><span class="k1">static</span> <span class="k1">volatile</span> <span class="k1">unsigned</span> <span class="k1">int</span> frame_count<span class="k2">;</span></td></tr><tr><td class="number">4</td><td><span class="k1">static</span> <span class="k1">volatile</span> <span class="k1">unsigned</span> <span class="k1">int</span> actual_tic<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td><span class="c">/*--- Ticker (timer : game logic)------------------------------------------*/</span></td></tr><tr><td class="number">7</td><td><span class="k1">void</span> wait_proc<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">8</td><td><span class="k2">{</span></td></tr><tr><td class="number">9</td><td>  actual_tic<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td><span class="k2">}</span></td></tr><tr><td class="number">11</td><td><a href="http://www.allegro.cc/manual/END_OF_FUNCTION" target="_blank"><span class="a">END_OF_FUNCTION</span></a><span class="k2">(</span>wait_proc<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>&#160;</td></tr><tr><td class="number">13</td><td><span class="c">/*--- Fps proc (timer : calculate FPS) ------------------------------------*/</span></td></tr><tr><td class="number">14</td><td><span class="k1">void</span> fps_proc<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">15</td><td><span class="k2">{</span></td></tr><tr><td class="number">16</td><td>   fps <span class="k3">=</span> frame_count<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>   frame_count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td><span class="k2">}</span></td></tr><tr><td class="number">19</td><td><a href="http://www.allegro.cc/manual/END_OF_FUNCTION" target="_blank"><span class="a">END_OF_FUNCTION</span></a><span class="k2">(</span>fps_proc<span class="k2">)</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>

The main loop:
</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="k1">void</span> loop<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span>  </td></tr><tr><td class="number">3</td><td>  <span class="k1">unsigned</span> <span class="k1">int</span> nPrevUpdateTime<span class="k2">;</span> <span class="c">// previous update time</span></td></tr><tr><td class="number">4</td><td>  <span class="k1">bool</span> bGameUpdated<span class="k2">;</span>            <span class="c">// bool tells if we need to redraw</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td>  actual_tic <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>  nPrevUpdateTime <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td>  <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">10</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">11</td><td>    <span class="c">/*--- move all game logic -----------------------------------------*/</span></td></tr><tr><td class="number">12</td><td>    bGameUpdated <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>    <span class="k1">while</span> <span class="k2">(</span>nPrevUpdateTime <span class="k3">!</span><span class="k3">=</span> actual_tic<span class="k2">)</span> </td></tr><tr><td class="number">14</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">15</td><td>      <span class="c">/* polls */</span></td></tr><tr><td class="number">16</td><td>      <a href="http://www.allegro.cc/manual/poll_keyboard" target="_blank"><span class="a">poll_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>&#160;</td></tr><tr><td class="number">18</td><td>      <span class="c">/* moves */</span></td></tr><tr><td class="number">19</td><td>      t<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>      </td></tr><tr><td class="number">21</td><td>      <span class="c">/* objects moves */</span></td></tr><tr><td class="number">22</td><td>      listEnemies.move<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>      groupe.move<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>      listStars.move<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td>&#160;</td></tr><tr><td class="number">26</td><td>      <span class="c">/* timer variable settings */</span></td></tr><tr><td class="number">27</td><td>      nPrevUpdateTime<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>      bGameUpdated <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">30</td><td>    <span class="c">// DONT KNOW WHY IT IS BLOCKED TO 64 FPS</span></td></tr><tr><td class="number">31</td><td>    <span class="c">// if i put 'bGameUpdated = true; ' here, it gives me something like 1000 FPS !</span></td></tr><tr><td class="number">32</td><td>&#160;</td></tr><tr><td class="number">33</td><td>&#160;</td></tr><tr><td class="number">34</td><td>    <span class="c">/*--- Display start -----------------------------------------------*/</span></td></tr><tr><td class="number">35</td><td>    <span class="k1">if</span> <span class="k2">(</span>bGameUpdated<span class="k2">)</span></td></tr><tr><td class="number">36</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">37</td><td>      clear<span class="k2">(</span>bmp<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td>&#160;</td></tr><tr><td class="number">39</td><td>      <span class="c">/* various drawings */</span></td></tr><tr><td class="number">40</td><td>      </td></tr><tr><td class="number">41</td><td>      textprintf<span class="k2">(</span>bmp, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="n">0</span>, <span class="n">0</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span>,</td></tr><tr><td class="number">42</td><td>        <span class="s">"FPS%5d  logic %d"</span>, fps, actual_tic<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">43</td><td>            </td></tr><tr><td class="number">44</td><td>      <span class="c">/* blit bmp to screen */</span></td></tr><tr><td class="number">45</td><td>      </td></tr><tr><td class="number">46</td><td>      frame_count<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">47</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">48</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">49</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (anto80)</author>
		<pubDate>Mon, 26 Jun 2006 14:41:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>vsync ?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (A J)</author>
		<pubDate>Mon, 26 Jun 2006 14:49:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>yes what the hell is this ?<br /><a href="http://www.allegro.cc/forums/thread/585737">http://www.allegro.cc/forums/thread/585737</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Frank Drebin)</author>
		<pubDate>Mon, 26 Jun 2006 15:28:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">A J said:</div><div class="quote"><p>
vsync ?
</p></div></div><p>A J: No, because like i said: </p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
if I force the program to draw, even if nothing in the game logic has changed, i get something like 1000 FPS !
</p></div></div><p>

Yes Frank, it seems that I&#39;m getting the same problem.<br />I am using set_gfx_mode in windowed mode too.<br />Is there any solution for this?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (anto80)</author>
		<pubDate>Mon, 26 Jun 2006 16:38:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>two things that probably won&#39;t make a difference:</p><p>1.<br />&gt;while (nPrevUpdateTime != actual_tic) </p><p>Maybe actual_tic has increased beyond nprevupdatetime during a draw loop and doesn&#39;t get caught until the next?</p><p>I do it like this:<br />  while(actual_tic!=0) <br />  { ...<br />     actual_tic--;<br />  }</p><p>And in the timer handler increment actual_tic</p><p>2. Maybe the keyboard_poll is doing something. Try removing it. I don&#39;t think there are any platforms at the minute that need keyboard polling.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Mon, 26 Jun 2006 16:53:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>as i pointed out in my post even this program won&#39;t get more than 64 fps and i don&#39;t see any errors here:
</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;allegro.h&gt;</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="k1">volatile</span> <span class="k1">int</span> speed_counter<span class="k3">=</span><span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td><span class="k1">volatile</span> <span class="k1">int</span> fps<span class="k3">=</span><span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td><span class="k1">volatile</span> <span class="k1">int</span> frames<span class="k3">=</span><span class="n">0</span><span class="k2">;</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> bbuffer<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td><span class="k1">void</span> increment_speed_counter<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">9</td><td><span class="k2">{</span></td></tr><tr><td class="number">10</td><td>   speed_counter<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td><span class="k2">}</span></td></tr><tr><td class="number">12</td><td><a href="http://www.allegro.cc/manual/END_OF_FUNCTION" target="_blank"><span class="a">END_OF_FUNCTION</span></a><span class="k2">(</span>increment_speed_counter<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>&#160;</td></tr><tr><td class="number">14</td><td><span class="k1">void</span> update_fps<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">15</td><td><span class="k2">{</span></td></tr><tr><td class="number">16</td><td>   fps<span class="k3">=</span>frames<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>   frames<span class="k3">=</span><span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td><span class="k2">}</span></td></tr><tr><td class="number">19</td><td><a href="http://www.allegro.cc/manual/END_OF_FUNCTION" target="_blank"><span class="a">END_OF_FUNCTION</span></a><span class="k2">(</span>update_fps<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>&#160;</td></tr><tr><td class="number">21</td><td><span class="k1">void</span> init<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">22</td><td><span class="k2">{</span></td></tr><tr><td class="number">23</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">24</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">25</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">26</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_FULLSCREEN,<span class="n">640</span>,<span class="n">480</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">27</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">28</td><td>   <a href="http://www.allegro.cc/manual/LOCK_VARIABLE" target="_blank"><span class="a">LOCK_VARIABLE</span></a><span class="k2">(</span>speed_counter<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>   <a href="http://www.allegro.cc/manual/LOCK_VARIABLE" target="_blank"><span class="a">LOCK_VARIABLE</span></a><span class="k2">(</span>fps<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>   <a href="http://www.allegro.cc/manual/LOCK_VARIABLE" target="_blank"><span class="a">LOCK_VARIABLE</span></a><span class="k2">(</span>frames<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td>   <a href="http://www.allegro.cc/manual/LOCK_FUNCTION" target="_blank"><span class="a">LOCK_FUNCTION</span></a><span class="k2">(</span>increment_speed_counter<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>   <a href="http://www.allegro.cc/manual/LOCK_FUNCTION" target="_blank"><span class="a">LOCK_FUNCTION</span></a><span class="k2">(</span>update_fps<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">33</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>increment_speed_counter,BPS_TO_TIMER<span class="k2">(</span><span class="n">100</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">34</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>update_fps,BPS_TO_TIMER<span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td><span class="k2">}</span></td></tr><tr><td class="number">36</td><td>&#160;</td></tr><tr><td class="number">37</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">38</td><td><span class="k2">{</span></td></tr><tr><td class="number">39</td><td>   init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>&#160;</td></tr><tr><td class="number">41</td><td>   bbuffer<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">640</span>,<span class="n">480</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td>      </td></tr><tr><td class="number">43</td><td>   <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<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>      <span class="k1">while</span> <span class="k2">(</span>speed_counter&gt;0<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>         speed_counter--<span class="k2">;</span></td></tr><tr><td class="number">48</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">49</td><td>      <a href="http://www.allegro.cc/manual/clear_bitmap" target="_blank"><span class="a">clear_bitmap</span></a><span class="k2">(</span>bbuffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">50</td><td>      <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>bbuffer,<a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>,<span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span>,<span class="k3">-</span><span class="n">1</span>,<span class="s">"FPS: %i"</span>,fps<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">51</td><td>      <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>bbuffer,<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">640</span>,<span class="n">480</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">52</td><td>      frames<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">53</td><td>      <span class="k1">while</span> <span class="k2">(</span>speed_counter<span class="k3">=</span><span class="k3">=</span><span class="n">0</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">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">54</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">55</td><td>&#160;</td></tr><tr><td class="number">56</td><td>   <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>bbuffer<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="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">59</td><td><span class="k2">}</span></td></tr><tr><td class="number">60</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 (Frank Drebin)</author>
		<pubDate>Mon, 26 Jun 2006 17:01:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Allegro&#39;s timers are not accurate. If you want more accuracy, you&#39;ll have to find another method. I&#39;ve posted my timer class before, which makes it rather simple to keep track in a method similar to Allegro&#39;s. It doesn&#39;t take any hit for having one or multiple timers since it runs off the system&#39;s timing stuff, and on the right platforms it&#39;ll use high-accuracy timing.</p><p>If you want me to repost it, let me know. I&#39;ll even show you how to use it (which as I said, is simple and almost Allegro-like).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Mon, 26 Jun 2006 17:04:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Assuming windows, what happens if you use the software directx driver or GDI, GFX_DIRECTX_SOFT/GFX_DIRECTX_GDI
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Mon, 26 Jun 2006 17:27:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I had this problem when I was coding scripts with &quot;mIRC&quot;, a windows software.</p><p>Basically it&#39;s because the default Windows timer (the one which returns &quot;ticks&quot;) has a <b>resolution</b> which is limited to +- 15 ms, wich gives a result of max 65 times per second.</p><p>So with my games I could not &quot;loop&quot; a logic with a timer more than 64 times per second.</p><p>In this case I don&#39;t really understand why, but it seems that Allegro&#39;s timer suffers from the same problem...</p><p>The solution for me was to use a high resolution timer (check <a href="http://www.unb.ca/metrics/software/HRtime.html">http://www.unb.ca/metrics/software/HRtime.html</a>)</p><p>I hope that this can help...</p><p>P.S: What this your OS, and what version is it ?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Epsi)</author>
		<pubDate>Mon, 26 Jun 2006 18:19:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">KittyCat said:</div><div class="quote"><p>
Allegro&#39;s timers are not accurate. If you want more accuracy, you&#39;ll have to find another method.
</p></div></div><p>

Aye, it&#39;s a sad world for coders... Last time I managed flawless scrolling (panning) was by using double buffer and vsync() for timer, on DOS, and it could run on anything...<br />Today, I&#39;d need to code at least 3 different algorithms, none of them would work on my own machine <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Mon, 26 Jun 2006 18:34:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m running Win XP SP 2.<br />I&#39;m developping with MSVC 6, with Allegro and Allegro GL.</p><p>KittyCat, I don&#39;t know what is the Timer class you are talking about. Could you please show me where it is and how to include it, and use it in my prog?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (anto80)</author>
		<pubDate>Mon, 26 Jun 2006 19:18:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Strangely enough, what you&#39;re asking is the first result of a search on the word &quot;Timer&quot;, posted by &quot;Kitty Cat&quot;.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Mon, 26 Jun 2006 19:31:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>epsi,<br />i don&#39;t think that the allegro timer is the problem - at least with the code i posted.<br />if you leave the rest(1) out of the code you&#39;ll get far more than 100 fps and if i understood you right this should not happen then...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Frank Drebin)</author>
		<pubDate>Mon, 26 Jun 2006 19:40:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Frank Drebin: no it&#39;s exactly the case: rest(1) will rest for 15ms istead of 1 (assuming it uses Windows basic timer), thus limiting you to 64 fps. If you remove it, you get rid of the timer effect and you get &quot;no limit&quot; fps.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Epsi)</author>
		<pubDate>Mon, 26 Jun 2006 20:01:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I have the <a href="http://www.allegro.cc/forums/thread/586096">same problem.</a> <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Vasco Freitas)</author>
		<pubDate>Mon, 26 Jun 2006 20:02:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>so does it mean that i can&#39;t run my timer accurate and give some cpu-cycles to the system at once?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Frank Drebin)</author>
		<pubDate>Mon, 26 Jun 2006 20:09:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Richard Phipps has set a link to the windows timer code he uses, haven&#39;t a clue what to search for in the site is though, may be if he reads this he might post the link <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Mon, 26 Jun 2006 20:21:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><a href="http://www.allegro.cc/forums/thread/585140">QPC,GTOD</a> thread for HighRes Timer.</p><p>Here is my wrapper, you can find the full Library Documentation in my sig:</p><p>part of common.h
</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="c">/*!</span></td></tr><tr><td class="number">2</td><td><span class="c"> * Timing Structure</span></td></tr><tr><td class="number">3</td><td><span class="c"> */</span></td></tr><tr><td class="number">4</td><td>&#160;</td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td><span class="k1">typedef</span> <span class="k1">struct</span> N_TIME</td></tr><tr><td class="number">7</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td>time_t delta<span class="k2">;</span></td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td><span class="p">#ifndef LINUX</span></td></tr><tr><td class="number">12</td><td>        LARGE_INTEGER freq<span class="k2">;</span></td></tr><tr><td class="number">13</td><td>        LARGE_INTEGER startTime<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>        LARGE_INTEGER currentTime<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td><span class="p">#else</span></td></tr><tr><td class="number">17</td><td>&#160;</td></tr><tr><td class="number">18</td><td>        timeval startTime<span class="k2">;</span></td></tr><tr><td class="number">19</td><td>        timeval currentTime<span class="k2">;</span></td></tr><tr><td class="number">20</td><td>&#160;</td></tr><tr><td class="number">21</td><td><span class="p">#endif</span></td></tr><tr><td class="number">22</td><td>&#160;</td></tr><tr><td class="number">23</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">24</td><td>&#160;</td></tr><tr><td class="number">25</td><td>N_TIME<span class="k2">;</span></td></tr><tr><td class="number">26</td><td>&#160;</td></tr><tr><td class="number">27</td><td>&#160;</td></tr><tr><td class="number">28</td><td>&#160;</td></tr><tr><td class="number">29</td><td><span class="c">/*</span></td></tr><tr><td class="number">30</td><td><span class="c"> * Init or restart from zero any N_TIME HiTimer</span></td></tr><tr><td class="number">31</td><td><span class="c"> */</span></td></tr><tr><td class="number">32</td><td>&#160;</td></tr><tr><td class="number">33</td><td><span class="k1">void</span> start_HiTimer<span class="k2">(</span> N_TIME <span class="k3">*</span>timer <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>&#160;</td></tr><tr><td class="number">35</td><td>&#160;</td></tr><tr><td class="number">36</td><td>&#160;</td></tr><tr><td class="number">37</td><td><span class="c">/*</span></td></tr><tr><td class="number">38</td><td><span class="c"> * Poll any N_TIME HiTimer, returning usec</span></td></tr><tr><td class="number">39</td><td><span class="c"> */</span></td></tr><tr><td class="number">40</td><td>&#160;</td></tr><tr><td class="number">41</td><td>time_t get_usec<span class="k2">(</span> N_TIME <span class="k3">*</span>timer <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td>&#160;</td></tr><tr><td class="number">43</td><td>&#160;</td></tr><tr><td class="number">44</td><td>&#160;</td></tr><tr><td class="number">45</td><td><span class="c">/*</span></td></tr><tr><td class="number">46</td><td><span class="c"> * Poll any N_TIME HiTimer, returning usec</span></td></tr><tr><td class="number">47</td><td><span class="c"> */</span></td></tr><tr><td class="number">48</td><td>&#160;</td></tr><tr><td class="number">49</td><td>time_t get_msec<span class="k2">(</span> N_TIME <span class="k3">*</span>timer <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">50</td><td>&#160;</td></tr><tr><td class="number">51</td><td>&#160;</td></tr><tr><td class="number">52</td><td>&#160;</td></tr><tr><td class="number">53</td><td><span class="c">/*</span></td></tr><tr><td class="number">54</td><td><span class="c"> * Poll any N_TIME HiTimer, returning usec</span></td></tr><tr><td class="number">55</td><td><span class="c"> */</span></td></tr><tr><td class="number">56</td><td>&#160;</td></tr><tr><td class="number">57</td><td>&#160;</td></tr><tr><td class="number">58</td><td>time_t get_sec<span class="k2">(</span> N_TIME <span class="k3">*</span>timer <span class="k2">)</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>

part of common.c:
</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="c">/*!\fn start_HiTimer( N_TIME *timer )</span></td></tr><tr><td class="number">2</td><td><span class="c"> *</span></td></tr><tr><td class="number">3</td><td><span class="c"> *\brief Initialize or restart from zero any N_TIME HiTimer</span></td></tr><tr><td class="number">4</td><td><span class="c"> *</span></td></tr><tr><td class="number">5</td><td><span class="c"> *\param timer Any N_TIMER *timer you wanna start or reset</span></td></tr><tr><td class="number">6</td><td><span class="c"> *</span></td></tr><tr><td class="number">7</td><td><span class="c"> */</span></td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td><span class="k1">void</span> start_HiTimer<span class="k2">(</span> N_TIME <span class="k3">*</span>timer <span class="k2">)</span></td></tr><tr><td class="number">10</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td>    timer <span class="k3">-</span><span class="k3">&gt;</span> delta <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>&#160;</td></tr><tr><td class="number">14</td><td><span class="p">#ifndef LINUX</span></td></tr><tr><td class="number">15</td><td>    QueryPerformanceFrequency<span class="k2">(</span> <span class="k2">(</span> LARGE_INTEGER <span class="k3">*</span> <span class="k2">)</span> <span class="k3">&amp;</span> timer <span class="k3">-</span><span class="k3">&gt;</span> freq <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>    QueryPerformanceCounter<span class="k2">(</span> <span class="k3">&amp;</span>timer <span class="k3">-</span><span class="k3">&gt;</span> startTime <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td><span class="p">#else</span></td></tr><tr><td class="number">18</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_421.html" target="_blank">gettimeofday</a><span class="k2">(</span> <span class="k3">&amp;</span>timer <span class="k3">-</span><span class="k3">&gt;</span> startTime, <span class="n">0</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td><span class="p">#endif</span></td></tr><tr><td class="number">20</td><td>&#160;</td></tr><tr><td class="number">21</td><td>    <span class="k2">}</span> <span class="c">/* init_HiTimer(...) */</span></td></tr><tr><td class="number">22</td><td>&#160;</td></tr><tr><td class="number">23</td><td>&#160;</td></tr><tr><td class="number">24</td><td>&#160;</td></tr><tr><td class="number">25</td><td><span class="c">/*!\fn get_usec( N_TIME  *timer )</span></td></tr><tr><td class="number">26</td><td><span class="c"> *</span></td></tr><tr><td class="number">27</td><td><span class="c"> *\brief Poll any N_TIME HiTimer, returning usec, and moving currentTime to startTime</span></td></tr><tr><td class="number">28</td><td><span class="c"> *</span></td></tr><tr><td class="number">29</td><td><span class="c"> *\param timer Any N_TIMER *timer you wanna poll</span></td></tr><tr><td class="number">30</td><td><span class="c"> *</span></td></tr><tr><td class="number">31</td><td><span class="c"> *\return The elapsed number of usec for the given N_TIME *timer</span></td></tr><tr><td class="number">32</td><td><span class="c"> */</span></td></tr><tr><td class="number">33</td><td>&#160;</td></tr><tr><td class="number">34</td><td>time_t get_usec<span class="k2">(</span> N_TIME <span class="k3">*</span>timer <span class="k2">)</span></td></tr><tr><td class="number">35</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">36</td><td>&#160;</td></tr><tr><td class="number">37</td><td><span class="p">#ifdef WIN32</span></td></tr><tr><td class="number">38</td><td>&#160;</td></tr><tr><td class="number">39</td><td>    QueryPerformanceCounter<span class="k2">(</span> <span class="k2">(</span> LARGE_INTEGER <span class="k3">*</span> <span class="k2">)</span> <span class="k3">&amp;</span> timer <span class="k3">-</span><span class="k3">&gt;</span> currentTime <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>&#160;</td></tr><tr><td class="number">41</td><td>    timer <span class="k3">-</span><span class="k3">&gt;</span> delta <span class="k3">=</span> <span class="n">1000000</span> <span class="k3">*</span> <span class="k2">(</span> timer <span class="k3">-</span><span class="k3">&gt;</span> currentTime . QuadPart <span class="k3">-</span> timer <span class="k3">-</span><span class="k3">&gt;</span> startTime . QuadPart <span class="k2">)</span> <span class="k3">/</span> timer <span class="k3">-</span><span class="k3">&gt;</span> freq . QuadPart <span class="k2">;</span></td></tr><tr><td class="number">42</td><td>&#160;</td></tr><tr><td class="number">43</td><td>    timer <span class="k3">-</span><span class="k3">&gt;</span> startTime <span class="k3">=</span> timer <span class="k3">-</span><span class="k3">&gt;</span> currentTime <span class="k2">;</span></td></tr><tr><td class="number">44</td><td>&#160;</td></tr><tr><td class="number">45</td><td><span class="p">#else</span></td></tr><tr><td class="number">46</td><td>&#160;</td></tr><tr><td class="number">47</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_421.html" target="_blank">gettimeofday</a><span class="k2">(</span> <span class="k3">&amp;</span>timer <span class="k3">-</span><span class="k3">&gt;</span> currentTime, <span class="n">0</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">48</td><td>&#160;</td></tr><tr><td class="number">49</td><td>    timer <span class="k3">-</span><span class="k3">&gt;</span> delta <span class="k3">=</span> <span class="k2">(</span> timer <span class="k3">-</span><span class="k3">&gt;</span> currentTime . tv_sec   <span class="k3">-</span> timer <span class="k3">-</span><span class="k3">&gt;</span> startTime . tv_sec  <span class="k2">)</span> <span class="k3">*</span> <span class="n">1000000</span> <span class="k3">+</span></td></tr><tr><td class="number">50</td><td>            <span class="k2">(</span> timer <span class="k3">-</span><span class="k3">&gt;</span> currentTime . tv_usec  <span class="k3">-</span> timer <span class="k3">-</span><span class="k3">&gt;</span> startTime . tv_usec <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">51</td><td>&#160;</td></tr><tr><td class="number">52</td><td>    timer <span class="k3">-</span><span class="k3">&gt;</span> startTime . tv_sec  <span class="k3">=</span> timer <span class="k3">-</span><span class="k3">&gt;</span> currentTime . tv_sec <span class="k2">;</span></td></tr><tr><td class="number">53</td><td>    timer <span class="k3">-</span><span class="k3">&gt;</span> startTime . tv_usec <span class="k3">=</span> timer <span class="k3">-</span><span class="k3">&gt;</span> currentTime . tv_usec <span class="k2">;</span></td></tr><tr><td class="number">54</td><td>&#160;</td></tr><tr><td class="number">55</td><td><span class="p">#endif</span></td></tr><tr><td class="number">56</td><td>&#160;</td></tr><tr><td class="number">57</td><td>    <span class="k1">return</span> timer <span class="k3">-</span><span class="k3">&gt;</span> delta<span class="k2">;</span></td></tr><tr><td class="number">58</td><td>&#160;</td></tr><tr><td class="number">59</td><td>    <span class="k2">}</span> <span class="c">/* get_usec( ... ) */</span></td></tr><tr><td class="number">60</td><td>&#160;</td></tr><tr><td class="number">61</td><td>&#160;</td></tr><tr><td class="number">62</td><td>&#160;</td></tr><tr><td class="number">63</td><td>&#160;</td></tr><tr><td class="number">64</td><td><span class="c">/*!\fn get_msec( N_TIME  *timer )</span></td></tr><tr><td class="number">65</td><td><span class="c"> *</span></td></tr><tr><td class="number">66</td><td><span class="c"> *\brief Poll any N_TIME HiTimer, returning msec, and moving currentTime to startTime</span></td></tr><tr><td class="number">67</td><td><span class="c"> *</span></td></tr><tr><td class="number">68</td><td><span class="c"> *\param timer Any N_TIMER *timer you wanna poll</span></td></tr><tr><td class="number">69</td><td><span class="c"> *</span></td></tr><tr><td class="number">70</td><td><span class="c"> *\return The elapsed number of msec for the given N_TIME *timer</span></td></tr><tr><td class="number">71</td><td><span class="c"> */</span></td></tr><tr><td class="number">72</td><td>&#160;</td></tr><tr><td class="number">73</td><td>time_t get_msec<span class="k2">(</span> N_TIME <span class="k3">*</span>timer <span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">74</td><td>&#160;</td></tr><tr><td class="number">75</td><td><span class="p">#ifdef WIN32</span></td></tr><tr><td class="number">76</td><td>&#160;</td></tr><tr><td class="number">77</td><td>    QueryPerformanceCounter<span class="k2">(</span> <span class="k2">(</span> LARGE_INTEGER <span class="k3">*</span> <span class="k2">)</span> <span class="k3">&amp;</span> timer <span class="k3">-</span><span class="k3">&gt;</span> currentTime <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">78</td><td>&#160;</td></tr><tr><td class="number">79</td><td>    timer <span class="k3">-</span><span class="k3">&gt;</span> delta <span class="k3">=</span> <span class="n">1000</span> <span class="k3">*</span> <span class="k2">(</span> timer <span class="k3">-</span><span class="k3">&gt;</span> currentTime . QuadPart <span class="k3">-</span> timer <span class="k3">-</span><span class="k3">&gt;</span> startTime . QuadPart <span class="k2">)</span> <span class="k3">/</span> timer <span class="k3">-</span><span class="k3">&gt;</span> freq . QuadPart <span class="k2">;</span></td></tr><tr><td class="number">80</td><td>&#160;</td></tr><tr><td class="number">81</td><td>    timer <span class="k3">-</span><span class="k3">&gt;</span> startTime <span class="k3">=</span> timer <span class="k3">-</span><span class="k3">&gt;</span> currentTime <span class="k2">;</span></td></tr><tr><td class="number">82</td><td>&#160;</td></tr><tr><td class="number">83</td><td><span class="p">#else</span></td></tr><tr><td class="number">84</td><td>&#160;</td></tr><tr><td class="number">85</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_421.html" target="_blank">gettimeofday</a><span class="k2">(</span> <span class="k3">&amp;</span>timer <span class="k3">-</span><span class="k3">&gt;</span> currentTime, <span class="n">0</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">86</td><td>&#160;</td></tr><tr><td class="number">87</td><td>    timer <span class="k3">-</span><span class="k3">&gt;</span> delta <span class="k3">=</span> <span class="k2">(</span> timer <span class="k3">-</span><span class="k3">&gt;</span> currentTime . tv_sec   <span class="k3">-</span> timer <span class="k3">-</span><span class="k3">&gt;</span> startTime . tv_sec  <span class="k2">)</span> <span class="k3">*</span> <span class="n">1000</span> <span class="k3">+</span></td></tr><tr><td class="number">88</td><td>            <span class="k2">(</span> timer <span class="k3">-</span><span class="k3">&gt;</span> currentTime . tv_usec  <span class="k3">-</span> timer <span class="k3">-</span><span class="k3">&gt;</span> startTime . tv_usec <span class="k2">)</span> <span class="k3">/</span> <span class="n">1000</span> <span class="k2">;</span></td></tr><tr><td class="number">89</td><td>&#160;</td></tr><tr><td class="number">90</td><td>    timer <span class="k3">-</span><span class="k3">&gt;</span> startTime . tv_sec  <span class="k3">=</span> timer <span class="k3">-</span><span class="k3">&gt;</span> currentTime . tv_sec <span class="k2">;</span></td></tr><tr><td class="number">91</td><td>    timer <span class="k3">-</span><span class="k3">&gt;</span> startTime . tv_usec <span class="k3">=</span> timer <span class="k3">-</span><span class="k3">&gt;</span> currentTime . tv_usec <span class="k2">;</span></td></tr><tr><td class="number">92</td><td>&#160;</td></tr><tr><td class="number">93</td><td><span class="p">#endif</span></td></tr><tr><td class="number">94</td><td>&#160;</td></tr><tr><td class="number">95</td><td>    <span class="k1">return</span> timer <span class="k3">-</span><span class="k3">&gt;</span> delta<span class="k2">;</span></td></tr><tr><td class="number">96</td><td><span class="k2">}</span> <span class="c">/* get_msec(...) */</span></td></tr><tr><td class="number">97</td><td>&#160;</td></tr><tr><td class="number">98</td><td>&#160;</td></tr><tr><td class="number">99</td><td>&#160;</td></tr><tr><td class="number">100</td><td><span class="c">/*!\fn get_sec( N_TIME  *timer )</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="c"> *\brief Poll any N_TIME HiTimer, returning sec, and moving currentTime to startTime</span></td></tr><tr><td class="number">103</td><td><span class="c"> *</span></td></tr><tr><td class="number">104</td><td><span class="c"> *\param timer Any N_TIMER *timer you wanna poll</span></td></tr><tr><td class="number">105</td><td><span class="c"> *</span></td></tr><tr><td class="number">106</td><td><span class="c"> *\return The elapsed number of sec for the given N_TIME *timer</span></td></tr><tr><td class="number">107</td><td><span class="c"> */</span></td></tr><tr><td class="number">108</td><td>&#160;</td></tr><tr><td class="number">109</td><td>time_t get_sec<span class="k2">(</span> N_TIME <span class="k3">*</span>timer <span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">110</td><td>&#160;</td></tr><tr><td class="number">111</td><td><span class="p">#ifdef WIN32</span></td></tr><tr><td class="number">112</td><td>&#160;</td></tr><tr><td class="number">113</td><td>    QueryPerformanceCounter<span class="k2">(</span> <span class="k2">(</span> LARGE_INTEGER <span class="k3">*</span> <span class="k2">)</span> <span class="k3">&amp;</span> timer <span class="k3">-</span><span class="k3">&gt;</span> currentTime <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">114</td><td>&#160;</td></tr><tr><td class="number">115</td><td>    timer <span class="k3">-</span><span class="k3">&gt;</span> delta <span class="k3">=</span> <span class="k2">(</span> timer <span class="k3">-</span><span class="k3">&gt;</span> currentTime . QuadPart <span class="k3">-</span> timer <span class="k3">-</span><span class="k3">&gt;</span> startTime . QuadPart <span class="k2">)</span> <span class="k3">/</span> timer <span class="k3">-</span><span class="k3">&gt;</span> freq . QuadPart <span class="k2">;</span></td></tr><tr><td class="number">116</td><td>&#160;</td></tr><tr><td class="number">117</td><td>    timer <span class="k3">-</span><span class="k3">&gt;</span> startTime <span class="k3">=</span> timer <span class="k3">-</span><span class="k3">&gt;</span> currentTime <span class="k2">;</span></td></tr><tr><td class="number">118</td><td>&#160;</td></tr><tr><td class="number">119</td><td><span class="p">#else</span></td></tr><tr><td class="number">120</td><td>&#160;</td></tr><tr><td class="number">121</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_421.html" target="_blank">gettimeofday</a><span class="k2">(</span> <span class="k3">&amp;</span>timer <span class="k3">-</span><span class="k3">&gt;</span> currentTime, <span class="n">0</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">122</td><td>&#160;</td></tr><tr><td class="number">123</td><td>    timer <span class="k3">-</span><span class="k3">&gt;</span> delta <span class="k3">=</span> <span class="k2">(</span> timer <span class="k3">-</span><span class="k3">&gt;</span> currentTime . tv_sec   <span class="k3">-</span> timer <span class="k3">-</span><span class="k3">&gt;</span> startTime . tv_sec  <span class="k2">)</span>  <span class="k3">+</span></td></tr><tr><td class="number">124</td><td>            <span class="k2">(</span> timer <span class="k3">-</span><span class="k3">&gt;</span> currentTime . tv_usec  <span class="k3">-</span> timer <span class="k3">-</span><span class="k3">&gt;</span> startTime . tv_usec <span class="k2">)</span> <span class="k3">/</span> <span class="n">1000000</span> <span class="k2">;</span></td></tr><tr><td class="number">125</td><td>&#160;</td></tr><tr><td class="number">126</td><td>    timer <span class="k3">-</span><span class="k3">&gt;</span> startTime . tv_sec  <span class="k3">=</span> timer <span class="k3">-</span><span class="k3">&gt;</span> currentTime . tv_sec <span class="k2">;</span></td></tr><tr><td class="number">127</td><td>    timer <span class="k3">-</span><span class="k3">&gt;</span> startTime . tv_usec <span class="k3">=</span> timer <span class="k3">-</span><span class="k3">&gt;</span> currentTime . tv_usec <span class="k2">;</span></td></tr><tr><td class="number">128</td><td>&#160;</td></tr><tr><td class="number">129</td><td><span class="p">#endif</span></td></tr><tr><td class="number">130</td><td>&#160;</td></tr><tr><td class="number">131</td><td>    <span class="k1">return</span> timer <span class="k3">-</span><span class="k3">&gt;</span> delta<span class="k2">;</span></td></tr><tr><td class="number">132</td><td>&#160;</td></tr><tr><td class="number">133</td><td><span class="k2">}</span><span class="c">/* get_sec(...) */</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Mon, 26 Jun 2006 21:51:54 +0000</pubDate>
	</item>
</rss>
