<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>FPS Timer Class not working</title>
		<link>http://www.allegro.cc/forums/view/612823</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 19 Jun 2013 08:00:02 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I created a class that acts FPS timer and has a wait function that returns every time the timer ticks. The problem I&#39;m having is that the timer never ticks and I can&#39;t figure out why.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">class</span> FrameTimer <span class="k2">{</span>
<span class="number">  2</span>
<span class="number">  3</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>event_queue<span class="k2">;</span>
<span class="number">  4</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a> <span class="k3">*</span>timer<span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span>public:
<span class="number">  7</span>
<span class="number">  8</span>  FrameTimer<span class="k2">(</span><span class="k1">int</span> rate<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  9</span>    event_queue <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>    timer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> rate<span class="k2">)</span><span class="k2">;</span> <span class="c">// I've checked this value, it's what it should be</span>
<span class="number"> 11</span>    <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span>
<span class="number"> 14</span>    <span class="c">// I added the event code in the constructor as well</span>
<span class="number"> 15</span>    <span class="c">// for testing, and this event also doesn't tick</span>
<span class="number"> 16</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event<span class="k2">;</span>
<span class="number"> 17</span>    std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"a\n"</span><span class="k2">;</span> <span class="c">// this prints</span>
<span class="number"> 18</span>    <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>event_queue, <span class="k3">&amp;</span>event<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>    std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"b\n"</span><span class="k2">;</span>
<span class="number"> 20</span>  <span class="k2">}</span>
<span class="number"> 21</span>
<span class="number"> 22</span>  <span class="k1">bool</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_858.html" target="_blank">wait</a><span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 23</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event<span class="k2">;</span>
<span class="number"> 24</span>    std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"c\n"</span><span class="k2">;</span>
<span class="number"> 25</span>    <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>event_queue, <span class="k3">&amp;</span>event<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>
<span class="number"> 27</span>    <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 28</span>  <span class="k2">}</span>
<span class="number"> 29</span><span class="k2">}</span><span class="k2">;</span>
</div></div><p>

I&#39;m initialising Allegro in the main method, here is the code:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number"> 1</span><span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 2</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span><span class="n">640</span>, <span class="n">480</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 3</span><span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span> <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 4</span>FrameTimer frame_timer<span class="k2">(</span><span class="n">60</span><span class="k2">)</span><span class="k2">;</span>
</div></div><p>

Thanks!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Sythical)</author>
		<pubDate>Wed, 19 Jun 2013 03:31:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You&#39;re not listening to the event.<br />use <span class="source-code"><a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (l j)</author>
		<pubDate>Wed, 19 Jun 2013 03:53:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>@taron  Ah yes, I keep forgetting to do that. Thank you, works fine now <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>Side question: I&#39;m outputting the FPS and it ranges from 60 to 66 and changes rapidly. Is this normal or am I doing something wrong?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Sythical)</author>
		<pubDate>Wed, 19 Jun 2013 04:11:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It&#39;s hard to define &#39;normal&#39; without much, <i>MUCH</i> more inf, but mine usually is 60fps with the odd flicker of 59fps, so maybe just a condition reshuffle or loop re-order; share some code &amp; IDE specs bro! <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dizzy Egg)</author>
		<pubDate>Wed, 19 Jun 2013 04:27:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>@Dizzy Egg</p><p>Sure thing, I&#39;ve only just started coding and trying to make the FPS more constant so there isn&#39;t much to shuffle. Here is my code: <a href="http://pastebin.com/UL9bzauA">http://pastebin.com/UL9bzauA</a></p><p>I&#39;m using VS11 on Windows 7 64-bit, I&#39;ve tried both release and debug modes.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Sythical)</author>
		<pubDate>Wed, 19 Jun 2013 04:42:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I have this in a demo, it&#39;s a bit easier to read, and tends to flatten out the spikes.</p><div class="source-code snippet"><div class="inner"><pre>  <span class="k1">char</span> fpscount<span class="k2">[</span><span class="n">256</span><span class="k2">]</span><span class="k2">;</span>
  <span class="k1">double</span> fpscount <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_time"><span class="a">al_get_time</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>

  <span class="k1">if</span><span class="k2">(</span> <span class="k2">(</span>frames % <span class="n">32</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>  <span class="c">//frames is an int that gets incremented every al_flip()</span>
  <span class="k2">{</span>
    <a href="http://www.delorie.com/djgpp/doc/libc/libc_737.html" target="_blank">sprintf</a><span class="k2">(</span>fpsmsg,<span class="s">"%8.4f"</span>,<span class="n">1</span>.<span class="n">0</span><span class="k3">/</span><span class="k2">(</span><span class="k2">(</span><span class="k1">double</span><span class="k2">)</span><span class="k2">(</span>fpscount-oldfps<span class="k2">)</span><span class="k3">/</span><span class="n">32</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
    oldfps <span class="k3">=</span> fpscount<span class="k2">;</span>
  <span class="k2">}</span>

  <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span>,<span class="n">1</span>.<span class="n">0</span>,<span class="n">1</span>.<span class="n">0</span><span class="k2">)</span>,<span class="n">20</span>.<span class="n">0</span>,<span class="n">20</span>.<span class="n">0</span>,<span class="n">0</span>,<span class="s">"%s"</span>,fpsmsg<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Wed, 19 Jun 2013 04:54:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Your code looks pretty solid; I&#39;m a bit drunk &amp;&amp;|| high so maybe I&#39;m completely wrong, but going by what you&#39;ve said try changing your constructor:</p><div class="source-code snippet"><div class="inner"><pre>
FrameTimer<span class="k2">(</span><span class="k1">double</span> rate<span class="k2">)</span><span class="k2">;</span>

<span class="c">//code code code</span>

frame_timer FrameTimer<span class="k2">(</span><span class="n">60</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

<img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /></p><p>(Edgar Reynaldo will tell you what&#39;s what....or maybe Thomas...wait, or maybe Trent...no wait....ahhhh, one of them will tell all soon. <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dizzy Egg)</author>
		<pubDate>Wed, 19 Jun 2013 05:16:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>@Arthur Kalliokoski<br />Thanks, I&#39;ll try that now but isn&#39;t calculating the average simply hiding the spikes and not actually getting rid of them?</p><p>@Dizzy Egg<br />I just tried that and that didn&#39;t seem to help.</p><p><span class="source-code">timer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> rate<span class="k2">)</span><span class="k2">;</span></span><br />^ it uses a double (1.0) in the calculation so I assumed rate will automatically be treated as a double.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Sythical)</author>
		<pubDate>Wed, 19 Jun 2013 05:42:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/612823/985275#target">Sythical</a> said:</div><div class="quote"><p> hiding the spikes and not actually getting rid of them</p></div></div><p>Sure.  You don&#39;t expect the video card to be synced to the system timer, do you?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Wed, 19 Jun 2013 05:44:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/612823/985276#target">Arthur Kalliokoski</a> said:</div><div class="quote"><p>Sure. You don&#39;t expect the video card to be synced to the system timer, do you?</p></div></div><p>

Okay, I see what you mean. That&#39;s what I was trying to get to when I asked whether this fluctuation is normal or not. So I shouldn&#39;t worry too much about this as long as the actual amount of frames each second is more or less the same?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Sythical)</author>
		<pubDate>Wed, 19 Jun 2013 05:54:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/612823/985277#target">Sythical</a> said:</div><div class="quote"><p> So I shouldn&#39;t worry too much about this</p></div></div><p>Correct.  Even the <a href="http://cdn.allegro.cc/file/library/allegro/5.0.8/allegro-5.0.8-extra.zip">example programs</a> do it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Wed, 19 Jun 2013 05:57:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Why are you continuously registering and unregistering the timer event source? Just register it once at the start. <b>If</b> you need to stop and start it use <span class="source-code"><a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a></span> and <span class="source-code"><a href="http://www.allegro.cc/manual/al_stop_timer"><span class="a">al_stop_timer</span></a></span>. But in this case I don&#39;t see why you need to.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Wed, 19 Jun 2013 07:19:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/612823/985280#target">Trent Gamblin</a> said:</div><div class="quote"><p>Why are you continuously registering and unregistering the timer event source?</p></div></div><p>

I did it because I was able to make the program pause by scrolling through the console window. When it resumed, there were a lot of tick events in the queue and the frame rate suddenly jumped to a 1000 for a bit as it tried to quickly go through all of the events. I checked the documentation to find a way to clear the even queue but couldn&#39;t find anything so had to resort to registering and unregistering.</p><p>I didn&#39;t want to start/stop the timer in case that messes up with the frame rate but I didn&#39;t give this solution much thought and it&#39;s probably a better solution, I&#39;ll give it a try.</p><p>Also, the frame rate counter now shows 59.999-ish and 60.000-ish so I&#39;m quite happy, thank you everyone.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Sythical)</author>
		<pubDate>Wed, 19 Jun 2013 07:43:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You can flush the event queue with <span class="source-code"><a href="http://www.allegro.cc/manual/al_flush_event_queue"><span class="a">al_flush_event_queue</span></a></span>. But in your example you don&#39;t really have a game loop set up. To get it to not jump to 1000 FPS you need something like this (this is not ideal and is half-pseudo code because I&#39;m feeling lazy):</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">while</span> <span class="k2">(</span><span class="k1">true</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>   <span class="k1">bool</span> draw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  3</span>   <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>al_event_queue_is_empty<span class="k2">(</span>queue<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  4</span>      <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event<span class="k2">;</span>
<span class="number">  5</span>      <a href="http://www.allegro.cc/manual/al_get_next_event"><span class="a">al_get_next_event</span></a><span class="k2">(</span>queue, <span class="k3">&amp;</span>event<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>      <span class="c">// process some events here</span>
<span class="number">  7</span>      <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  8</span>         draw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  9</span>      <span class="k2">}</span>
<span class="number"> 10</span>      <span class="c">// more event processing</span>
<span class="number"> 11</span>   <span class="k2">}</span>
<span class="number"> 12</span>   <span class="k1">if</span> <span class="k2">(</span>draw<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 13</span>      <span class="c">// Draw stuff</span>
<span class="number"> 14</span>      <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>   <span class="k2">}</span>
<span class="number"> 16</span><span class="k2">}</span>
</div></div><p>

This keeps the event queue from building up by clearing the whole thing before ever drawing anything. It&#39;ll also balance your FPS counter.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Wed, 19 Jun 2013 08:00:02 +0000</pubDate>
	</item>
</rss>
