<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Classes and Threads</title>
		<link>http://www.allegro.cc/forums/view/608200</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 29 Aug 2011 04:29:14 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well I need to have an instruction running in the same time as the main thread,<br />example: instruction would be play an audio then destroy the sample. Normally I need to call that function that plays the audio then destroys it and wait until it does so. What I want is to call that class function in a separate thread and start it so that the game can continue without waiting for the sound to be played and then destroyed. </p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_THREAD"><span class="a">ALLEGRO_THREAD</span></a> <span class="k3">*</span>t <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_thread"><span class="a">al_create_thread</span></a><span class="k2">(</span>playdead,<span class="k3">&amp;</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_735.html" target="_blank">sound</a><span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_start_thread"><span class="a">al_start_thread</span></a><span class="k2">(</span>t<span class="k2">)</span><span class="k2">;</span>

<span class="k1">void</span> <span class="k3">*</span>playdead<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_THREAD"><span class="a">ALLEGRO_THREAD</span></a> <span class="k3">*</span>me,<span class="k1">void</span> <span class="k3">*</span>arg<span class="k2">)</span>
<span class="k2">{</span>
sound.playkill<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="k1">return</span> NULL<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

this gives an error at sound.playkill() :		IntelliSense: a nonstatic member reference must be relative to a specific object	</p><p>Am I doing it wrong ?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (alex Ioan)</author>
		<pubDate>Mon, 29 Aug 2011 02:50:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> <span class="k3">*</span> playdead<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_THREAD"><span class="a">ALLEGRO_THREAD</span></a> <span class="k3">*</span> me, <span class="k1">void</span> <span class="k3">*</span> arg<span class="k2">)</span><span class="k2">{</span>
  Sound <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_735.html" target="_blank">sound</a> <span class="k3">=</span> <span class="k2">(</span>Sound<span class="k3">*</span><span class="k2">)</span> arg<span class="k2">;</span>
  sound-&gt;playKill<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
  <span class="k1">return</span> NULL<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
Thats what the <b>arg</b> argument is for.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kazzmir)</author>
		<pubDate>Mon, 29 Aug 2011 02:54:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Got it thanks ! hope it works <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /> </p><p>EDIT: it works though when I play another sample after it crashes ....</p><p>strange that I got it to play 2 samples in the same time from main thread and the thread I created... but the third sound just makes the program crash </p><p>&quot;Unhandled exception at 0x5bd1d190 in game.exe: 0xC0000005: Access violation writing location 0x5c09d000.&quot;</p><p>code:</p><p>game:
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_THREAD"><span class="a">ALLEGRO_THREAD</span></a> <span class="k3">*</span>t <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_thread"><span class="a">al_create_thread</span></a><span class="k2">(</span>playdead,<span class="k3">&amp;</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_735.html" target="_blank">sound</a><span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_start_thread"><span class="a">al_start_thread</span></a><span class="k2">(</span>t<span class="k2">)</span><span class="k2">;</span>

<span class="c">//stuff</span>
<span class="c">//press 1 return to main menu:</span>
<a href="http://www.allegro.cc/manual/al_destroy_thread"><span class="a">al_destroy_thread</span></a><span class="k2">(</span>t<span class="k2">)</span><span class="k2">;</span>
sound.stopfightmusic<span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span> 
sound.startbackmusic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//this line triggers the error </span>
<span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
</pre></div></div><p>

sound class
</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> <a href="http://www.allegro.cc/manual/ALLEGRO_SAMPLE_ID"><span class="a">ALLEGRO_SAMPLE_ID</span></a> bkgid<span class="k2">;</span>
<span class="number">  2</span>
<span class="number">  3</span><span class="k1">void</span> sound::startbackmusic<span class="k2">(</span><span class="k2">)</span>  
<span class="number">  4</span>      <span class="k2">{</span><span class="k1">if</span><span class="k2">(</span>musicon<span class="k3">=</span><span class="k3">=</span><span class="n">1</span><span class="k2">)</span>
<span class="number">  5</span>  <span class="k2">{</span> <a href="http://www.allegro.cc/manual/al_play_sample"><span class="a">al_play_sample</span></a><span class="k2">(</span>bkg,<span class="n">0</span>.<span class="n">55</span>,<span class="n">0</span>,<span class="n">1</span>.<span class="n">0</span>,ALLEGRO_PLAYMODE_LOOP,<span class="k3">&amp;</span>bkgid<span class="k2">)</span><span class="k2">;</span><span class="k2">}</span><span class="k2">}</span><span class="c">//this line triggers the error </span>
<span class="number">  6</span>
<span class="number">  7</span><span class="k1">void</span> sound::stopfightmusic<span class="k2">(</span><span class="k1">int</span> a<span class="k2">)</span>
<span class="number">  8</span>    <span class="k2">{</span><span class="k1">if</span><span class="k2">(</span>musicon<span class="k3">=</span><span class="k3">=</span><span class="n">1</span><span class="k2">)</span>
<span class="number">  9</span>    <span class="k2">{</span><a href="http://www.allegro.cc/manual/al_stop_sample"><span class="a">al_stop_sample</span></a><span class="k2">(</span><span class="k3">&amp;</span>bkgfid<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>      <span class="k1">if</span> <span class="k2">(</span>a<span class="k3">=</span><span class="k3">=</span><span class="n">1</span><span class="k2">)</span>
<span class="number"> 11</span>    <span class="k2">{</span><a href="http://www.allegro.cc/manual/al_destroy_sample"><span class="a">al_destroy_sample</span></a><span class="k2">(</span>bkg_fight<span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 12</span>      <span class="k2">}</span>
<span class="number"> 13</span>      <span class="k2">}</span>
<span class="number"> 14</span>
<span class="number"> 15</span><span class="k1">void</span> sound::playkill<span class="k2">(</span><span class="k2">)</span>  
<span class="number"> 16</span>      <span class="k2">{</span><span class="k1">if</span> <span class="k2">(</span>soundon<span class="k3">=</span><span class="k3">=</span><span class="n">1</span><span class="k2">)</span> 
<span class="number"> 17</span>  <span class="k2">{</span><a href="http://www.allegro.cc/manual/al_play_sample"><span class="a">al_play_sample</span></a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_519.html" target="_blank">kill</a>,<span class="n">1</span>.<span class="n">0</span>,<span class="n">0</span>,<span class="n">1</span>.<span class="n">0</span>,ALLEGRO_PLAYMODE_ONCE,NULL<span class="k2">)</span><span class="k2">;</span><span class="k2">}</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (alex Ioan)</author>
		<pubDate>Mon, 29 Aug 2011 02:57:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You can&#39;t pass stack allocated variables to a thread and expect the thread to work if the function that created the thread returns. You should allocate your sounds dynamically (malloc or new) in that case.</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// bad</span>
<span class="k1">void</span> dostuff<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span>
  Sound <a href="http://www.delorie.com/djgpp/doc/libc/libc_735.html" target="_blank">sound</a><span class="k2">;</span>
  play_in_thread<span class="k2">(</span><span class="k3">&amp;</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_735.html" target="_blank">sound</a><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>

<span class="c">// good</span>
<span class="k1">void</span> dostuff<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span>
  Sound <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_735.html" target="_blank">sound</a> <span class="k3">=</span> <span class="k1">new</span> Sound<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
  play_in_thread<span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_735.html" target="_blank">sound</a><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kazzmir)</author>
		<pubDate>Mon, 29 Aug 2011 03:11:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>hmm will see if it works
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (alex Ioan)</author>
		<pubDate>Mon, 29 Aug 2011 03:16:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That code is <i>HORRIBLY</i> formatted. You will find it difficult to get people to help you with code formatted like that. I suggest you read online about how to properly style C or C++ code (there are different ways that are purely subjective, but your way is just unacceptable).</p><p>You seem to be lacking some of the core knowledge of C++ classes and objects and parameter passing in C or C++. Do you understand what kazzmir is talking about?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Mon, 29 Aug 2011 04:10:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>yeap I understand it and yea I know my code style is horrible but I get it way better my way <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" /> will try and change it in time
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (alex Ioan)</author>
		<pubDate>Mon, 29 Aug 2011 04:29:14 +0000</pubDate>
	</item>
</rss>
