<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>strange timer behaviour</title>
		<link>http://www.allegro.cc/forums/view/585737</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 13 Jun 2006 11:17:07 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>ok i got the default game loop<br />speed_counter is incremented 100 times per second.
</p><div class="source-code snippet"><div class="inner"><pre><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>
<span class="k2">{</span>
   <span class="k1">while</span> <span class="k2">(</span>speed_counter&gt;0<span class="k2">)</span>
   <span class="k2">{</span>
      game<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
      speed_counter--<span class="k2">;</span>
   <span class="k2">}</span>
   draw_game<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
   <span class="c">//while (speed_counter==0) rest(1);</span>
<span class="k2">}</span>
</pre></div></div><p>
this way i get 100+ FPS.<br />if i uncomment the rest(1)-line my FPS-counter stays at 64.<br />so shouldn&#39;t i get here FPS around 100, too?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Frank Drebin)</author>
		<pubDate>Sat, 03 Jun 2006 13:53:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Are you using vsync or tripple-buffering?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Jonatan Hedborg)</author>
		<pubDate>Sat, 03 Jun 2006 15:17:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>no just double buffering.<br />the strange thing is that i uncommented this line once before and then it worked fine...<br />this was with an older compiler but this shouldn&#39;t matter!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Frank Drebin)</author>
		<pubDate>Sat, 03 Jun 2006 16:00:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Resting isn&#39;t accurate. Resting for 1ms will cause you to rest closer to 10ms (giving you 100 FPS max). Then add in the time to do the logic and render each frame, and possible background tasks in the system, and you&#39;ll get less than 100 FPS. What&#39;s your speed if you use rest(0) instead of rest(1)?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Sat, 03 Jun 2006 18:29:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>for rest(0) it&#39;s the same thing.<br />and i know that the timer isn&#39;t that accurate but when i did this before the FPS were <b>around</b> 100 (+- 5) but not constant 64...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Frank Drebin)</author>
		<pubDate>Sat, 03 Jun 2006 23:57:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Maybe something has turned on your vid card vsync.  Just a week ago my favorite old DOS editor could use the extended keys again for no reason that I could see.</p><p>&quot;I hate computers, they&#39;re so nasty and complex.  I could just <u>pinch</u> them&quot;  Marvin the Martian
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Sun, 04 Jun 2006 03:02:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>in this case is there any way to disable vsync or do i have to reintstall the older version of mingw?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Frank Drebin)</author>
		<pubDate>Sun, 04 Jun 2006 15:02:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I doubt its your compiler. There should be an option in your video card settings to force vsync on or off, or leave it application defined.</p><p>I doubt it&#39;s a vsync issue though. What version of Allegro do you have?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Mon, 05 Jun 2006 01:49:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Calling rest(1) forces the OS to put the process on the queue and hence reschedule it.  10ms time slices isn&#39;t too uncommon. Quick guess, you using windows?</p><p>ps: This is why its not a &quot;real-time&quot; os.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Goalie Ca)</author>
		<pubDate>Mon, 05 Jun 2006 10:09:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>yes its in windows (and linux) and newest allegro<br />even if rest(1) would delay more than 10 ms there would be only a few frames less but not that much
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Frank Drebin)</author>
		<pubDate>Tue, 06 Jun 2006 17:09:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
even if rest(1) would delay more than 10 ms
</p></div></div><p>Tasks/Threads get 10ms slices, its more than possible to loose 100ms after doing your slice, it all depends on the system load, and the priorities all threads are running at.</p><p>edit, You CANNOT depend on the scheduler doing <u>anything</u> in a non real time OS.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Tue, 06 Jun 2006 21:40:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>ok i reinstalled the older verision of the compiler with no success.<br />i said my timer runs 100 times per second and with rest(1) i get 64FPS.<br />i have tested timers that runs 50 and 40 times per second and here i get the 50 and 40+-1 FPS.<br />so whats the difference betwenn a 50 and a 100 BPS timer <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Frank Drebin)</author>
		<pubDate>Mon, 12 Jun 2006 17:24:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>edit: Eh nevermind, not entirely sure what you&#39;re getting at
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (BrknPhoenix)</author>
		<pubDate>Mon, 12 Jun 2006 18:48:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
so whats the difference betwenn a 50 and a 100 BPS timer
</p></div></div><p>
About twice as many tics (meaning more logic calls, and more attempted frames drawn). If your system is just barely keeping up at 100FPS with no resting, it can lose several frames if you try to rest any.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Mon, 12 Jun 2006 19:23:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>i know that 100 is twice as fast as a 50 BPS timer...<br />i meant what makes the difference in the FPS?</p><p>and without rest(1) i get around 150 FPS so this shouldn&#39;t be the problem.</p><p>[edit]<br />even this code doesn&#39;t work - test it yourself !
</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, 12 Jun 2006 22:13:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Both rest(0) and rest(1) give me 55~60 FPS with that. Granted though, X isn&#39;t the best at getting the fastest speed.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Tue, 13 Jun 2006 06:23:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>yes someone try it in windows!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Frank Drebin)</author>
		<pubDate>Tue, 13 Jun 2006 11:17:07 +0000</pubDate>
	</item>
</rss>
