<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>help with threads</title>
		<link>http://www.allegro.cc/forums/view/610479</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 01 Jul 2012 01:43:20 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m trying to put this function on a separate thread so it can run while the user still using the program. heres the function:</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">void</span> core::saveDeck<span class="k2">(</span><span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>    <span class="k1">double</span> start <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="number">  4</span>    string path <span class="k3">=</span> <span class="s">"Decks/"</span><span class="k3">+</span>deckName<span class="k3">+</span><span class="s">".deck"</span><span class="k2">;</span>
<span class="number">  5</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_659.html" target="_blank">remove</a><span class="k2">(</span>path.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>    ofstream oFile<span class="k2">(</span>path.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>    CURL <span class="k3">*</span>curl<span class="k2">;</span>
<span class="number">  8</span>    FILE <span class="k3">*</span>file<span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>    string flag <span class="k3">=</span> <span class="s">"n"</span><span class="k2">;</span>
<span class="number"> 11</span>    vector<span class="k3">&lt;</span>card&gt; mainboard <span class="k3">=</span> listItemViewer<span class="k2">[</span>MAIN_TAB_DECK<span class="k2">]</span>.getCardList<span class="k2">(</span><span class="k2">)</span>, sideboard <span class="k3">=</span> listItemViewer<span class="k2">[</span>MAIN_TAB_DECK<span class="k3">+</span><span class="n">1</span><span class="k2">]</span>.getCardList<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span>    <span class="k1">if</span><span class="k2">(</span>sideboard.size<span class="k2">(</span><span class="k2">)</span> <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 14</span>    <span class="k2">{</span>
<span class="number"> 15</span>        flag <span class="k3">=</span> <span class="s">"y"</span><span class="k2">;</span>
<span class="number"> 16</span>    <span class="k2">}</span>
<span class="number"> 17</span>
<span class="number"> 18</span>    <span class="k1">for</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> mainboard.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 19</span>    <span class="k2">{</span>
<span class="number"> 20</span>        oFile <span class="k3">&lt;</span><span class="k3">&lt;</span> mainboard<span class="k2">[</span>i<span class="k2">]</span>.set <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"*"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> mainboard<span class="k2">[</span>i<span class="k2">]</span>.numberOf <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"*"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> mainboard<span class="k2">[</span>i<span class="k2">]</span>.name <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"*"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 21</span>    <span class="k2">}</span>
<span class="number"> 22</span>
<span class="number"> 23</span>    oFile <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"sideboard "</span> <span class="k3">+</span> flag <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 24</span>
<span class="number"> 25</span>    <span class="k1">if</span><span class="k2">(</span>flag <span class="k3">=</span><span class="k3">=</span> <span class="s">"y"</span><span class="k2">)</span>
<span class="number"> 26</span>    <span class="k2">{</span>
<span class="number"> 27</span>        <span class="k1">for</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> sideboard.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 28</span>        <span class="k2">{</span>
<span class="number"> 29</span>            oFile <span class="k3">&lt;</span><span class="k3">&lt;</span> sideboard<span class="k2">[</span>i<span class="k2">]</span>.set <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"*"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> sideboard<span class="k2">[</span>i<span class="k2">]</span>.numberOf <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"*"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> sideboard<span class="k2">[</span>i<span class="k2">]</span>.name <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"*"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 30</span>        <span class="k2">}</span>
<span class="number"> 31</span>    <span class="k2">}</span>
<span class="number"> 32</span>
<span class="number"> 33</span>    oFile.close<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>
<span class="number"> 35</span>    file <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_337.html" target="_blank">fopen</a><span class="k2">(</span><span class="k2">(</span><span class="s">"Decks/"</span><span class="k3">+</span>deckName<span class="k3">+</span><span class="s">".deck"</span><span class="k2">)</span>.c_str<span class="k2">(</span><span class="k2">)</span>, <span class="s">"rb"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 36</span>
<span class="number"> 37</span>    curl_global_init<span class="k2">(</span>CURL_GLOBAL_ALL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 38</span>
<span class="number"> 39</span>  <span class="c">/* get a curl handle */</span>
<span class="number"> 40</span>    curl <span class="k3">=</span> curl_easy_init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 41</span>
<span class="number"> 42</span>    <span class="k1">if</span><span class="k2">(</span>curl<span class="k2">)</span>
<span class="number"> 43</span>    <span class="k2">{</span>
<span class="number"> 44</span>        <span class="c">/* enable uploading */</span>
<span class="number"> 45</span>        curl_easy_setopt<span class="k2">(</span>curl, CURLOPT_UPLOAD, <span class="n">1</span>L<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 46</span>
<span class="number"> 47</span>        curl_easy_setopt<span class="k2">(</span>curl, CURLOPT_USERPWD, <span class="s">"username:password"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 48</span>
<span class="number"> 49</span>        <span class="c">/* specify target */</span>
<span class="number"> 50</span>        curl_easy_setopt<span class="k2">(</span>curl,CURLOPT_URL, <span class="k2">(</span><span class="s">"ftp://216.51.232.61/UserData/"</span><span class="k3">+</span>userName<span class="k3">+</span><span class="s">"/"</span><span class="k3">+</span>deckName<span class="k3">+</span><span class="s">".deck"</span><span class="k2">)</span>.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 51</span>
<span class="number"> 52</span>        <span class="c">/* now specify which file to upload */</span>
<span class="number"> 53</span>        curl_easy_setopt<span class="k2">(</span>curl, CURLOPT_READDATA, file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 54</span>
<span class="number"> 55</span>        <span class="c">/* Now run off and do what you've been told! */</span>
<span class="number"> 56</span>        curl_easy_perform<span class="k2">(</span>curl<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 57</span>
<span class="number"> 58</span>        <span class="c">/* always cleanup */</span>
<span class="number"> 59</span>        curl_easy_cleanup<span class="k2">(</span>curl<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 60</span>    <span class="k2">}</span>
<span class="number"> 61</span>
<span class="number"> 62</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_308.html" target="_blank">fclose</a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 63</span>    curl_global_cleanup<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 64</span>    cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"save deck took: "</span> <span class="k3">&lt;</span><span class="k3">&lt;</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="k3">-</span>start<span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">" seconds"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 65</span><span class="k2">}</span>
</div></div><p>

It uses variables from the main thread and everything is wrapped in a class. </p><div class="source-code snippet"><div class="inner"><pre>processingThread <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>saveDeck, NULL<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>processingThread<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Not sure what I need for the second parameter, I&#39;m not returning any data. Can anyone help me out?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (shadyvillian)</author>
		<pubDate>Thu, 21 Jun 2012 07:31:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The second parameter can be NULL if you don&#39;t need it. You should use mutexes (<span class="source-code"><a href="http://www.allegro.cc/manual/al_lock_mutex"><span class="a">al_lock_mutex</span></a><span class="k2">(</span><span class="k2">)</span><span class="k3">/</span><a href="http://www.allegro.cc/manual/al_unlock_mutex"><span class="a">al_unlock_mutex</span></a></span>) to lock data that is being accessed from the main thread. You mainly want to make sure none of the data you are writing to the file is going to be modified by the main thread while this thread is writing the file.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Todd Cope)</author>
		<pubDate>Thu, 21 Jun 2012 08:25:30 +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/610479/958053#target">shadyvillian</a> said:</div><div class="quote"><p> It uses variables from the main thread
</p></div></div><p>Put those in a struct and use as argument? (Might make it harder to ensure main-thread doesn&#39;t F them up.)<br />Did you just post an address and a p-word? <img src="http://www.allegro.cc/forums/smileys/lipsrsealed.gif" alt=":-X" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (weapon_S)</author>
		<pubDate>Thu, 21 Jun 2012 11:33:42 +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/610479/958053#target">shadyvillian</a> said:</div><div class="quote"><p> Can anyone help me out?</p></div></div><p>What is the actual problem?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (axilmar)</author>
		<pubDate>Thu, 21 Jun 2012 14:19:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It doesn&#39;t like the function I&#39;m supplying it. Does the thread have to be a paramter in the function? What if everything is just in a class scope? </p><p>EDIT: messing around with this I might almost have it</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">struct</span> SaveData
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>    std::vector<span class="k3">&lt;</span>card&gt; mainboard, sideboard<span class="k2">;</span>
<span class="number">  4</span>    std::string userName, deckName<span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span>    SaveData<span class="k2">(</span>std::vector<span class="k3">&lt;</span>card&gt; main, std::vector<span class="k3">&lt;</span>card&gt; side, std::string user, std::string deck<span class="k2">)</span>
<span class="number">  7</span>    <span class="k2">{</span>
<span class="number">  8</span>        mainboard <span class="k3">=</span> main<span class="k2">;</span>
<span class="number">  9</span>        sideboard <span class="k3">=</span> side<span class="k2">;</span>
<span class="number"> 10</span>        userName <span class="k3">=</span> user<span class="k2">;</span>
<span class="number"> 11</span>        deckName <span class="k3">=</span> deck<span class="k2">;</span>
<span class="number"> 12</span>    <span class="k2">}</span>
<span class="number"> 13</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span> SaveData <span class="k3">*</span>data <span class="k3">=</span> arg<span class="k2">(</span><span class="k3">*</span>SaveData<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span>    ofstream oFile<span class="k2">(</span><span class="k2">(</span><span class="s">"Decks/"</span><span class="k3">+</span>data-&gt;deckName<span class="k3">+</span><span class="s">".deck"</span><span class="k2">)</span>.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>    CURL <span class="k3">*</span>curl<span class="k2">;</span>
<span class="number"> 19</span>    FILE <span class="k3">*</span>file<span class="k2">;</span>
<span class="number"> 20</span>
<span class="number"> 21</span>    string flag <span class="k3">=</span> <span class="s">"n"</span><span class="k2">;</span>
<span class="number"> 22</span>
<span class="number"> 23</span>    <span class="k1">if</span><span class="k2">(</span>data.sideboard.size<span class="k2">(</span><span class="k2">)</span> <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 24</span>    <span class="k2">{</span>
<span class="number"> 25</span>        flag <span class="k3">=</span> <span class="s">"y"</span><span class="k2">;</span>
<span class="number"> 26</span>    <span class="k2">}</span>
<span class="number"> 27</span>
<span class="number"> 28</span>    <span class="k1">for</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> data-&gt;mainboard.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 29</span>    <span class="k2">{</span>
<span class="number"> 30</span>        oFile <span class="k3">&lt;</span><span class="k3">&lt;</span> data-&gt;mainboard<span class="k2">[</span>i<span class="k2">]</span>.set <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"*"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> data-&gt;mainboard<span class="k2">[</span>i<span class="k2">]</span>.numberOf <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"*"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> data-&gt;mainboard<span class="k2">[</span>i<span class="k2">]</span>.name <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"*"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 31</span>    <span class="k2">}</span>
<span class="number"> 32</span>
<span class="number"> 33</span>    oFile <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"sideboard "</span> <span class="k3">+</span> flag <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 34</span>
<span class="number"> 35</span>    <span class="k1">if</span><span class="k2">(</span>flag <span class="k3">=</span><span class="k3">=</span> <span class="s">"y"</span><span class="k2">)</span>
<span class="number"> 36</span>    <span class="k2">{</span>
<span class="number"> 37</span>        <span class="k1">for</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> data-&gt;sideboard.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 38</span>        <span class="k2">{</span>
<span class="number"> 39</span>            oFile <span class="k3">&lt;</span><span class="k3">&lt;</span> data-&gt;sideboard<span class="k2">[</span>i<span class="k2">]</span>.set <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"*"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> data-&gt;sideboard<span class="k2">[</span>i<span class="k2">]</span>.numberOf <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"*"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> data-&gt;sideboard<span class="k2">[</span>i<span class="k2">]</span>.name <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"*"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 40</span>        <span class="k2">}</span>
<span class="number"> 41</span>    <span class="k2">}</span>
<span class="number"> 42</span>
<span class="number"> 43</span>    oFile.close<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span>    file <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_337.html" target="_blank">fopen</a><span class="k2">(</span><span class="k2">(</span><span class="s">"Decks/"</span><span class="k3">+</span>data-&gt;deckName<span class="k3">+</span><span class="s">".deck"</span><span class="k2">)</span>.c_str<span class="k2">(</span><span class="k2">)</span>, <span class="s">"rb"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 45</span>    curl_global_init<span class="k2">(</span>CURL_GLOBAL_ALL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 46</span>    curl <span class="k3">=</span> curl_easy_init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 47</span>
<span class="number"> 48</span>    <span class="k1">if</span><span class="k2">(</span>curl<span class="k2">)</span>
<span class="number"> 49</span>    <span class="k2">{</span>
<span class="number"> 50</span>        curl_easy_setopt<span class="k2">(</span>curl, CURLOPT_UPLOAD, <span class="n">1</span>L<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 51</span>        curl_easy_setopt<span class="k2">(</span>curl, CURLOPT_USERPWD, <span class="s">"username:password"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 52</span>        curl_easy_setopt<span class="k2">(</span>curl,CURLOPT_URL, <span class="k2">(</span><span class="s">"ftp://216.51.232.61/UserData/"</span><span class="k3">+</span>data-&gt;userName<span class="k3">+</span><span class="s">"/"</span><span class="k3">+</span>data-&gt;deckName<span class="k3">+</span><span class="s">".deck"</span><span class="k2">)</span>.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 53</span>        curl_easy_setopt<span class="k2">(</span>curl, CURLOPT_READDATA, file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 54</span>        curl_easy_perform<span class="k2">(</span>curl<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 55</span>        curl_easy_cleanup<span class="k2">(</span>curl<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 56</span>    <span class="k2">}</span>
<span class="number"> 57</span>
<span class="number"> 58</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_308.html" target="_blank">fclose</a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 59</span>    curl_global_cleanup<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 60</span><span class="k2">}</span>
<span class="number"> 61</span>
<span class="number"> 62</span>SaveData data <span class="k3">=</span> SaveData<span class="k2">(</span>listItemViewer<span class="k2">[</span>MAIN_TAB_DECK<span class="k2">]</span>.getCardList<span class="k2">(</span><span class="k2">)</span>, listItemViewer<span class="k2">[</span>MAIN_TAB_DECK<span class="k3">+</span><span class="n">1</span><span class="k2">]</span>.getCardList<span class="k2">(</span><span class="k2">)</span>, userName, deckName<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 63</span>                processingThread <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>saveDeck<span class="k2">(</span>processingThread, <span class="k3">&amp;</span>data<span class="k2">)</span>, NULL<span class="k2">)</span><span class="k2">;</span> <span class="c">//error here</span>
<span class="number"> 64</span>                <a href="http://www.allegro.cc/manual/al_start_thread"><span class="a">al_start_thread</span></a><span class="k2">(</span>processingThread<span class="k2">)</span><span class="k2">;</span>
</div></div><p>

I get this error. Does my function need to be static or something?</p><p>error: invalid conversion from &#39;void*&#39; to &#39;void* (*)(ALLEGRO_THREAD*, void*)&#39; [-fpermissive]|
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (shadyvillian)</author>
		<pubDate>Thu, 21 Jun 2012 21:16:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It does indeed have trouble with member functions that aren&#39;t static(ie: tied to one instance of the class). If it has to be tied to a class instance, you&#39;d need the mem_fn functions of the std library. Also, the function that you put in al_create_thread should accept a void* parameter.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (J-Gamer)</author>
		<pubDate>Thu, 21 Jun 2012 23:27:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I decided to make it a non-member function and just pass a struct to make it easier now. Now I&#39;m getting a crash on </p><div class="source-code snippet"><div class="inner"><pre>oFile <span class="k3">&lt;</span><span class="k3">&lt;</span> data-&gt;mainboard<span class="k2">[</span>i<span class="k2">]</span>.set <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"*"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> data-&gt;mainboard<span class="k2">[</span>i<span class="k2">]</span>.numberOf <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"*"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> data-&gt;mainboard<span class="k2">[</span>i<span class="k2">]</span>.name <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"*"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
</pre></div></div><p>


#0 005ADCC5	std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&amp; std::operator&lt;&lt; &lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;(std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&amp;, std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;) () (??:??)<br />#1 0040B0CD	saveDeck(thread=0x87e68a0, arg=0x28f608)(deck_utility.cpp:87)<br />#2 004343C8	thread_func_trampoline () (??:??)<br />#3 0043A3F0	thread_proc_trampoline@4 () (??:??)<br />#4 763D1287	msvcrt!_itow_s() (C:\Windows\syswow64\msvcrt.dll:??)<br />#5 763D1328	msvcrt!_endthreadex() (C:\Windows\syswow64\msvcrt.dll:??)<br />#6 74F1339A	KERNEL32!BaseCleanupAppcompatCacheSupport() (C:\Windows\syswow64\kernel32.dll:??)<br />#7 06685F30	?? () (??:??)<br />#8 77629EF2	ntdll!RtlpNtSetValueKey() (C:\Windows\system32\ntdll.dll:??)<br />#9 06685F30	?? () (??:??)<br />#10 77629EC5	ntdll!RtlpNtSetValueKey() (C:\Windows\system32\ntdll.dll:??)<br />#11 763D12E5	msvcrt!_endthreadex() (C:\Windows\syswow64\msvcrt.dll:??)<br />#12 ??	?? () (??:??)</p><p>Is there something else I need to do? Do I need to use a mutex?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (shadyvillian)</author>
		<pubDate>Thu, 21 Jun 2012 23:43:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Uhm, looks like you accessed an out of bounds string... That&#39;s my first guess.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 22 Jun 2012 09:43:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Their fine before they go through to the thread. Is there something I have to do to be able to use them or pass them different? latest 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">void</span> <span class="k3">*</span>saveDeck<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_THREAD"><span class="a">ALLEGRO_THREAD</span></a> <span class="k3">*</span>thread, <span class="k1">void</span> <span class="k3">*</span>arg<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>    SaveData <span class="k3">*</span>data <span class="k3">=</span> <span class="k2">(</span>SaveData<span class="k3">*</span><span class="k2">)</span>arg<span class="k2">;</span>
<span class="number">  4</span>    CURL <span class="k3">*</span>curl<span class="k2">;</span>
<span class="number">  5</span>    stringstream buffer<span class="k2">(</span>stringstream::out<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>    string flag <span class="k3">=</span> <span class="s">"n"</span><span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span>    <a href="http://www.allegro.cc/manual/al_lock_mutex"><span class="a">al_lock_mutex</span></a><span class="k2">(</span>data-&gt;mutex<span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>    <span class="k1">if</span><span class="k2">(</span>data-&gt;sideboard.size<span class="k2">(</span><span class="k2">)</span> <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 11</span>    <span class="k2">{</span>
<span class="number"> 12</span>        flag <span class="k3">=</span> <span class="s">"y"</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">for</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> data-&gt;mainboard.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 16</span>    <span class="k2">{</span>
<span class="number"> 17</span>        buffer <span class="k3">&lt;</span><span class="k3">&lt;</span> data-&gt;mainboard<span class="k2">[</span>i<span class="k2">]</span>.set <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"*"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> data-&gt;mainboard<span class="k2">[</span>i<span class="k2">]</span>.numberOf <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"*"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> data-&gt;mainboard<span class="k2">[</span>i<span class="k2">]</span>.name <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"*"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 18</span>    <span class="k2">}</span>
<span class="number"> 19</span>
<span class="number"> 20</span>    buffer <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"sideboard "</span> <span class="k3">+</span> flag <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 21</span>
<span class="number"> 22</span>    <span class="k1">if</span><span class="k2">(</span>flag <span class="k3">=</span><span class="k3">=</span> <span class="s">"y"</span><span class="k2">)</span>
<span class="number"> 23</span>    <span class="k2">{</span>
<span class="number"> 24</span>        <span class="k1">for</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> data-&gt;sideboard.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 25</span>        <span class="k2">{</span>
<span class="number"> 26</span>            buffer <span class="k3">&lt;</span><span class="k3">&lt;</span> data-&gt;sideboard<span class="k2">[</span>i<span class="k2">]</span>.set <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"*"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> data-&gt;sideboard<span class="k2">[</span>i<span class="k2">]</span>.numberOf <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"*"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> data-&gt;sideboard<span class="k2">[</span>i<span class="k2">]</span>.name <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"*"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 27</span>        <span class="k2">}</span>
<span class="number"> 28</span>    <span class="k2">}</span>
<span class="number"> 29</span>    curl_global_init<span class="k2">(</span>CURL_GLOBAL_ALL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>    curl <span class="k3">=</span> curl_easy_init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>
<span class="number"> 32</span>    <span class="k1">if</span><span class="k2">(</span>curl<span class="k2">)</span>
<span class="number"> 33</span>    <span class="k2">{</span>
<span class="number"> 34</span>        curl_easy_setopt<span class="k2">(</span>curl, CURLOPT_UPLOAD, <span class="n">1</span>L<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>        curl_easy_setopt<span class="k2">(</span>curl, CURLOPT_USERPWD, <span class="s">"username:password"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 36</span>        curl_easy_setopt<span class="k2">(</span>curl,CURLOPT_URL, <span class="k2">(</span><span class="s">"ftp://216.51.232.61/UserData/"</span><span class="k3">+</span>data-&gt;userName<span class="k3">+</span><span class="s">"/"</span><span class="k3">+</span>data-&gt;deckName<span class="k3">+</span><span class="s">".deck"</span><span class="k2">)</span>.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>        curl_easy_setopt<span class="k2">(</span>curl, CURLOPT_READDATA, <span class="k3">&amp;</span>buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 38</span>        curl_easy_perform<span class="k2">(</span>curl<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 39</span>        curl_easy_cleanup<span class="k2">(</span>curl<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span>    <span class="k2">}</span>
<span class="number"> 41</span>
<span class="number"> 42</span>    curl_global_cleanup<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 43</span>    <a href="http://www.allegro.cc/manual/al_unlock_mutex"><span class="a">al_unlock_mutex</span></a><span class="k2">(</span>data-&gt;mutex<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span>    <span class="k1">return</span> NULL<span class="k2">;</span>
<span class="number"> 45</span><span class="k2">}</span>
<span class="number"> 46</span>
<span class="number"> 47</span>SaveData data <span class="k3">=</span> SaveData<span class="k2">(</span>listItemViewer<span class="k2">[</span>MAIN_TAB_DECK<span class="k2">]</span>.getCardList<span class="k2">(</span><span class="k2">)</span>, listItemViewer<span class="k2">[</span>MAIN_TAB_DECK<span class="k3">+</span><span class="n">1</span><span class="k2">]</span>.getCardList<span class="k2">(</span><span class="k2">)</span>, userName, deckName<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 48</span>processingThread <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>saveDeck, <span class="k3">&amp;</span>data<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 49</span><a href="http://www.allegro.cc/manual/al_start_thread"><span class="a">al_start_thread</span></a><span class="k2">(</span>processingThread<span class="k2">)</span><span class="k2">;</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (shadyvillian)</author>
		<pubDate>Fri, 22 Jun 2012 18:52:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It appears as if you&#39;re using a vector, and you use the size function, so your bounds should be right. That also means you&#39;re using C++, which means you could make this a member function of your SaveData class, instead of a global c-style function. That&#39;s how I would do it, but it&#39;s not necessary I guess.</p><p>As to your problem, your code should work as long as arg is a valid pointer to a valid SaveData object. And it should work fine from any thread as long as the mutex is locked properly, which it appears to be.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 24 Jun 2012 07:53:52 +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/610479/958376#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>That also means you&#39;re using C++, which means you could make this a member function of your SaveData class, instead of a global c-style function. That&#39;s how I would do it, but it&#39;s not necessary I guess.</p></div></div><p>
It&#39;d have to be static to be able to do that, though. The fun thing is that static functions can access the private parts if they have a pointer to an instance of their class.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (J-Gamer)</author>
		<pubDate>Sun, 24 Jun 2012 14:30:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Errr... I don&#39;t see why it would have to be static.. Member functions can always access static data, it&#39;s just that static functions can&#39;t access non-static data members without a pointer or an object.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 24 Jun 2012 23:32:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The problem with member functions is that they need an extra parameter(this). And I honestly can&#39;t get mem_fun to work(edit: with the second parameter being a reference. mem_fun uses references itself for its parameters, and you can&#39;t have a reference to a reference).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (J-Gamer)</author>
		<pubDate>Sun, 24 Jun 2012 23:36:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ve never had good luck with the standard library&#39;s mem_fun adaptors. If you really need something like that I would just break down and use Boost. (And FFS don&#39;t tell bambam I said that.)</p><p>What do you need them for?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 24 Jun 2012 23:43:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I had a class called Transformation, which had a function apply(Point&amp; p). I wanted to use that function on all points in a list, so I tried doing it with this line of code:<br /><span class="source-code">for_each<span class="k2">(</span>points.begin<span class="k2">(</span><span class="k2">)</span>, points.end<span class="k2">(</span><span class="k2">)</span>, trans.apply<span class="k2">)</span><span class="k2">;</span></span><br />Which obviously doesn&#39;t work for the reason I stated above. Then I tried using mem_fun, but I couldn&#39;t make it work:<br /><span class="source-code">for_each<span class="k2">(</span>points.begin<span class="k2">(</span><span class="k2">)</span>, points.end<span class="k2">(</span><span class="k2">)</span>, std::bind1st<span class="k2">(</span><span class="k3">&amp;</span>trans, mem_fun<span class="k2">(</span><span class="k3">&amp;</span>Transformation::apply<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></span><br />Which fails because mem_fun internally uses a reference to the argument of apply, which is a Point&amp;, and thus it tries to make a reference to a reference, which is impossible in C++.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (J-Gamer)</author>
		<pubDate>Mon, 25 Jun 2012 00:00:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>My first attempt to solve it would be to make Transformation::Apply take a pointer instead of a reference. That way you can still alter it, and mem_fun should be happy because it then has a reference to a pointer. ? My 2c. Like I said, I never had good luck with mem_fun.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 25 Jun 2012 00:05:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That should indeed work, but the project has been written and the deadline has passed. The problem would still be that it&#39;s still a list of Points, not of Point*&#39;s. That would need another workaround: a function accepting a Point and calling the bind1st(mem_fun()) function on the pointer.</p><p>Edit:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> apply_point<span class="k2">(</span>Transformation<span class="k3">*</span> t, Point<span class="k3">&amp;</span> p<span class="k2">)</span> <span class="k2">{</span>
    t-&gt;apply<span class="k2">(</span>p<span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span><span class="k2">;</span>

for_each<span class="k2">(</span>points.begin<span class="k2">(</span><span class="k2">)</span>, points.end<span class="k2">(</span><span class="k2">)</span>, bind1st<span class="k2">(</span>apply_point, <span class="k3">&amp;</span>trans<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

This is my workaround, but it uses more lines than a for-iteration over the list and manually calling apply.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (J-Gamer)</author>
		<pubDate>Mon, 25 Jun 2012 00:32:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Do you really need to save three lines though? Seems like OCD....
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 25 Jun 2012 03:43:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I just don&#39;t like writing extra functions for small things that aren&#39;t reusable at all. Just having a for-loop over the list is much more understandable code.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (J-Gamer)</author>
		<pubDate>Mon, 25 Jun 2012 17:25:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Am I doing it right? I start the thread and both are just doing their thing. The second thread will only run for about 5 seconds. Is there something I need to do once the function is done executing on the second thread?(like at the end of the function or in the main thread? Join the threads?)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (shadyvillian)</author>
		<pubDate>Mon, 25 Jun 2012 18:58:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You&#39;ll need to call al_destroy_thread to free up the resources. But only after you are 100% sure the thread has finished running. I think you can do that by calling al_join_thread.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (J-Gamer)</author>
		<pubDate>Mon, 25 Jun 2012 19:28:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Even when I don&#39;t use any data in my function it still crashes when I excute it and its not telling me why <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /></p><p>EDIT: commenting out the libcurl stuff gets rid of the error... Does anyone know if libcurl&#39;s easy inference thread safe?</p><p>EDIT: Turns out curl_global_init isn&#39;t thread safe. For any libcurl users out there is there a workaround for this?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (shadyvillian)</author>
		<pubDate>Tue, 26 Jun 2012 05:55:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Make it thread-safe yourself? Put a global mutex in and lock it each time you want to use libcurl. Then unlock it when you&#39;re done. If you do this consistently throughout your program, two threads will never try to access libcurl at the same time.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (J-Gamer)</author>
		<pubDate>Tue, 26 Jun 2012 13:25:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m not sure of its because both threads are trying to access it or because this from the libcurl manual: curl_global_init - This function is not thread safe. You must not call it when any other thread in the program (i.e. a thread sharing the same memory) is running. This doesn&#39;t just mean no other thread that is using libcurl. Because curl_global_init() calls functions of other libraries that are similarly thread unsafe, it could conflict with any other thread that uses these other libraries.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (shadyvillian)</author>
		<pubDate>Wed, 27 Jun 2012 18:05:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>As I understand it, it&#39;s even simpler than that: Call it once during the global initialization of your program. Long before you start creating extra threads.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Wed, 27 Jun 2012 18:35:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok I&#39;m gonna start doing that. I&#39;m still having problems with my data thats passed through arg though. For instance when I try to access the size of my vector with the size function its size is 15418846 when I know its zero. Does anyone know what would cause this? And how do I know if I need to use a mutex. ex_thread doesn&#39;t use one but ex_thread2 does. I&#39;m passing a vector returned from a get function into my struct thats being passed into the second thread. I don&#39;t have to lock the mutex in the main thread for when I use the data because it&#39;s just a copy of the data?</p><p>EDIT: crashing at mutex lock...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (shadyvillian)</author>
		<pubDate>Fri, 29 Jun 2012 04:52:48 +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/610479/958959#target">shadyvillian</a> said:</div><div class="quote"><p>
For instance when I try to access the size of my vector with the size function its size is 15418846 when I know its zero.
</p></div></div><p>
Somehow your vector is uninitialized or corrupt.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 01 Jul 2012 01:43:20 +0000</pubDate>
	</item>
</rss>
