<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="Slux`s RSS system" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

	<channel>
		<title>Slux's blog</title>
		<link>http://www.capponcino.it/alessio/diary.php</link>
		<description>Slux`site &amp; blog!</description>
		<pubDate>Fri, 30 Jul 2010 01:29:15 +0200</pubDate>
		<generator>http://www.capponcino.it/alessio/rss_blog.php</generator>
		<language>it</language>
		<atom:link href="http://www.capponcino.it/alessio/rss_blog.php" rel="self" type="application/rss+xml" />
		<item>
			<title>My Qt Blocking Queue version</title>
			<link>http://www.capponcino.it/alessio/diary.php?show=146</link>
			<comments>http://www.capponcino.it/alessio/diary.php?show=146</comments>
			<pubDate>Thu, 13 May 2010 23:10:00 +0200</pubDate>
			<dc:creator>Slux</dc:creator>
			<category>Qt</category>
			<guid>http://www.capponcino.it/alessio/diary.php?show=146</guid>
			<description>
				<![CDATA[
					<div>
<br />
</div>
<div>
It&#39;s strange that Qt framework doesn&#39;t have a QBlockingQueue implementation... So i have taken the QQueue, some QtConcurrent stuff and 10 minutes of my free lazy time&#160;<img alt="pinch" src="http://www.capponcino.it/alessio/misc/tiny_mce/plugins/emotions/images/pinch.png" style="vertical-align: middle; border-width: 0px" title="pinch" />
</div>
<div>
So, &#160;that&#39;s all!
</div>
<div class="console">
<div>
&#160;
</div>
<div>
#ifndef BLOCKINGQUEUE_H
</div>
<div>
#define BLOCKINGQUEUE_H
</div>
<div>
&#160;
</div>
<div>
#include &#60;QQueue&#62;<br />
#include &#60;QMutex&#62;<br />
#include &#60;QWaitCondition&#62;<br />
<br />
</div>
<br />
<div>
<br />
</div>
<div>
/*!
</div>
<div>
&#160;&#160;&#160; @brief A Blocking Queue implementation
</div>
<div>
&#160;&#160;&#160; @author Alessio &#39;Slux&#39; Di Fazio
</div>
<div>
*/
</div>
<div>
template  class BlockingQueue
</div>
<div>
{
</div>
<div>
<br />
</div>
<div>
private:
</div>
<div>
&#160;&#160; &#160;QQueue queue;
</div>
<div>
&#160;&#160; &#160;QMutex enqueueSerialAccess, dequeueWaitConditionLocker;
</div>
<div>
&#160;&#160; &#160;QWaitCondition waitBlockingQueueAccess;
</div>
<div>
<br />
</div>
<div>
public:
</div>
<div>
&#160;&#160; &#160;/*! Empty constructor */
</div>
<div>
&#160;&#160; &#160;inline BlockingQueue() {}
</div>
<div>
<br />
</div>
<div>
&#160;&#160; &#160;/*! Empty destructor */
</div>
<div>
&#160;&#160; &#160;inline ~BlockingQueue() {};
</div>
<div>
<br />
</div>
<div>
&#160;&#160; &#160;/*! enqueue thread safe function that wake one blocked thread that wait for dequeue. */
</div>
<div>
&#160;&#160; &#160;inline void enqueue(const T &#38;t)
</div>
<div>
&#160;&#160; &#160;{
</div>
<div>
&#160;&#160; &#160; &#160; &#160;QMutexLocker locker(&#38;enqueueSerialAccess);
</div>
<div>
<br />
</div>
<div>
&#160;&#160; &#160; &#160; &#160;queue.enqueue(t);
</div>
<div>
&#160;&#160; &#160; &#160; &#160;waitBlockingQueueAccess.wakeOne();
</div>
<div>
&#160;&#160; &#160;}
</div>
<div>
<br />
</div>
<div>
&#160;&#160; &#160;/*! blocking queue thread safe function that block the thread if the queue is empty. */
</div>
<div>
&#160;&#160; &#160;inline T dequeue()
</div>
<div>
&#160;&#160; &#160;{
</div>
<div>
&#160;&#160; &#160; &#160; &#160;dequeueWaitConditionLocker.lock();
</div>
<div>
<br />
</div>
<div>
&#160;&#160; &#160; &#160; &#160;if (queue.isEmpty())
</div>
<div>
&#160;&#160; &#160; &#160; &#160; &#160; &#160;waitBlockingQueueAccess.wait(&#38;dequeueWaitConditionLocker);
</div>
<div>
<br />
</div>
<div>
&#160;&#160; &#160; &#160; &#160;T returnVal = queue.dequeue();
</div>
<div>
<br />
</div>
<div>
&#160;&#160; &#160; &#160; &#160;dequeueWaitConditionLocker.unlock();
</div>
<div>
<br />
</div>
<div>
&#160;&#160; &#160; &#160; &#160;return returnVal;
</div>
<div>
&#160;&#160; &#160;}
</div>
<div>
<br />
</div>
<div>
};
</div>
<div>
<br />
</div>
<div>
#endif // BLOCKINGQUEUE_H
</div>
<div>
&#160;
</div>
</div>
<p>
&#160;
</p>
<p>
And if you want to test the blocking queue...
</p>
<div class="console">
<p>
#include &#60;QtCore&#62;<br />
#include &#34;BlockingQueue.h&#34;
</p>
<p>
BlockingQueue blockingQueue;
</p>
<p>
class Producer : public QThread
</p>
<p>
{
</p>
<p>
public:
</p>
<p>
&#160;&#160; &#160;QString threadName;
</p>
<p>
&#160;&#160; &#160;Producer(const QString &#38;name) {threadName = name;}
</p>
<p>
&#160;
</p>
<p>
protected:
</p>
<p>
&#160;&#160; &#160;virtual void run()
</p>
<p>
&#160;&#160; &#160;{
</p>
<p>
&#160;&#160; &#160; &#160; &#160;qDebug() &#60;&#60; &#34;Producer&#34; &#60;&#60; threadName &#60;&#60; &#34;started.&#34;;
</p>
<p>
&#160;&#160; &#160; &#160; &#160;for(int i=0; i&#60;100; ++i)
</p>
<p>
&#160;&#160; &#160; &#160; &#160;{
</p>
<p>
&#160;&#160; &#160; &#160; &#160; &#160; &#160;msleep(5);
</p>
<p>
&#160;&#160; &#160; &#160; &#160; &#160; &#160;QString val = threadName;
</p>
<p>
&#160;&#160; &#160; &#160; &#160; &#160; &#160;val.append(&#34; -&#62; &#34;);
</p>
<p>
&#160;&#160; &#160; &#160; &#160; &#160; &#160;val.append(QString::number(i));
</p>
<p>
&#160;&#160; &#160; &#160; &#160; &#160; &#160;blockingQueue.enqueue(val);
</p>
<p>
&#160;&#160; &#160; &#160; &#160;}
</p>
<p>
&#160;&#160; &#160;}
</p>
<p>
};
</p>
<p>
class Consumer : public QThread
</p>
<p>
{
</p>
<p>
protected:
</p>
<p>
&#160;&#160; &#160;virtual void run()
</p>
<p>
&#160;&#160; &#160;{
</p>
<p>
&#160;&#160; &#160; &#160; &#160;qDebug() &#60;&#60; &#34;Consumer started.&#34;;
</p>
<p>
&#160;&#160; &#160; &#160; &#160;Q_FOREVER
</p>
<p>
&#160;&#160; &#160; &#160; &#160;{
</p>
<p>
&#160;&#160; &#160; &#160; &#160; &#160; &#160;qDebug() &#60;&#60; &#34;Readed queque value:		&#34; &#60;&#60; blockingQueue.dequeue();
</p>
<p>
&#160;&#160; &#160; &#160; &#160;}
</p>
<p>
&#160;&#160; &#160;}
</p>
<p>
};
</p>
<p>
int main(int argc, char *argv[])
</p>
<p>
{
</p>
<p>
&#160;&#160; &#160;QCoreApplication a(argc, argv);
</p>
<p>
&#160;&#160; &#160;Consumer *consumer = new Consumer();
</p>
<p>
&#160;&#160; &#160;consumer-&#62;start();
</p>
<p>
&#160;&#160; &#160;for (int i=0; i&#60;100; ++i)
</p>
<p>
&#160;&#160; &#160;{
</p>
<p>
&#160;&#160; &#160; &#160; &#160;Producer *p = new Producer(QString::number(i).prepend(&#34;PROD &#34;));
</p>
<p>
&#160;&#160; &#160; &#160; &#160;p-&#62;start();
</p>
<p>
&#160;&#160; &#160;}
</p>
<p>
&#160;&#160; &#160;return a.exec();
</p>
<p>
}
</p>
</div>
<div>
&#160;
</div>
<div>
Slux :)&#160;
</div>
				]]>
			</description>
		</item>
		<item>
			<title>Faro&#039; di te la mia estensione...</title>
			<link>http://www.capponcino.it/alessio/diary.php?show=144</link>
			<comments>http://www.capponcino.it/alessio/diary.php?show=144</comments>
			<pubDate>Mon, 29 Mar 2010 22:00:00 +0200</pubDate>
			<dc:creator>Slux</dc:creator>
			<category>My Real Life</category>
			<guid>http://www.capponcino.it/alessio/diary.php?show=144</guid>
			<description>
				<![CDATA[
					<div style="text-align: center">
<a href="http://www.youtube.com/watch?v=kMFOPIg1bsc&#38;hl=it_IT&#38;fs=1&#38;color1=0x3a3a3a&#38;color2=0x999999" >YouTube Link</a>
	<!--param name="movie" value="http://www.youtube.com/watch?v=kMFOPIg1bsc&#38;hl=it_IT&#38;fs=1&#38;color1=0x3a3a3a&#38;color2=0x999999" />
	<param name="wmode" value="transparent" />
</object-->
</div>
<p>
Slux
</p>
				]]>
			</description>
		</item>
		<item>
			<title>Kseniya Simonova</title>
			<link>http://www.capponcino.it/alessio/diary.php?show=143</link>
			<comments>http://www.capponcino.it/alessio/diary.php?show=143</comments>
			<pubDate>Mon, 21 Sep 2009 21:03:00 +0200</pubDate>
			<dc:creator>Slux</dc:creator>
			<category>Arte</category>
			<guid>http://www.capponcino.it/alessio/diary.php?show=143</guid>
			<description>
				<![CDATA[
					<div style="text-align: center">
<a href="http://www.youtube.com/watch?v=518XP8prwZo" >YouTube Link</a>
	<!--param name="movie" value="http://www.youtube.com/watch?v=518XP8prwZo" />
	<param name="wmode" value="transparent" />
</object-->
</div>
<p>
Incantevole!
</p>
				]]>
			</description>
		</item>
		<item>
			<title>Time to release! WebQam!</title>
			<link>http://www.capponcino.it/alessio/diary.php?show=142</link>
			<comments>http://www.capponcino.it/alessio/diary.php?show=142</comments>
			<pubDate>Fri, 21 Aug 2009 16:30:00 +0200</pubDate>
			<dc:creator>Slux</dc:creator>
			<category>webQam</category>
			<guid>http://www.capponcino.it/alessio/diary.php?show=142</guid>
			<description>
				<![CDATA[
					<p align="center">
<strong>Ladies &#38; Gentleman, my brand-new project!!!</strong> <img alt="surprised" src="http://www.capponcino.it/alessio/misc/tiny_mce/plugins/emotions/images/surprised.png" style="border: 0pt none ; vertical-align: middle" title="surprised" />
</p>
<div align="center">
</div>
<h1 align="center" style="font-size: 23pt"><font color="#ff0000">web</font><img align="top" alt="Q" height="55" src="http://code.google.com/p/webqam/logo" width="52" /><font color="#ff0000">am</font></h1>
<p align="center">
<em>More info and other stuffs: <a href="http://code.google.com/p/webqam/" title="webQam homepage @ code.google.com">http://code.google.com/p/webqam/</a> <br />
</em>
</p>
				]]>
			</description>
		</item>
		<item>
			<title>Non e&#039; morto un uomo, ma una leggenda</title>
			<link>http://www.capponcino.it/alessio/diary.php?show=141</link>
			<comments>http://www.capponcino.it/alessio/diary.php?show=141</comments>
			<pubDate>Fri, 26 Jun 2009 22:28:00 +0200</pubDate>
			<dc:creator>Slux</dc:creator>
			<category>Music</category>
			<guid>http://www.capponcino.it/alessio/diary.php?show=141</guid>
			<description>
				<![CDATA[
					<p>
R.I.P.
</p>
<div style="text-align: center">
<a href="http://www.youtube.com/watch?v=o8rYl6K2STc" >YouTube Link</a>
	<!--param name="movie" value="http://www.youtube.com/watch?v=o8rYl6K2STc" />
	<param name="wmode" value="transparent" />
</object-->
</div>
				]]>
			</description>
		</item>
		<item>
			<title>Time to start a brand new project!</title>
			<link>http://www.capponcino.it/alessio/diary.php?show=140</link>
			<comments>http://www.capponcino.it/alessio/diary.php?show=140</comments>
			<pubDate>Mon, 08 Jun 2009 22:42:00 +0200</pubDate>
			<dc:creator>Slux</dc:creator>
			<category>Qt</category>
			<guid>http://www.capponcino.it/alessio/diary.php?show=140</guid>
			<description>
				<![CDATA[
					<div style="text-align: center">
<a href="http://www.capponcino.it/alessio/files/sviluppo/webQam/webQam.png" onclick="window.open('files/sviluppo/webQam/webQam.png','Image','resizable=yes,width=700,height=550,left='+(screen.availWidth/2-350)+',top='+(screen.availHeight/2-275)+'');return false;" title="Zoom"><img alt="webQam_preview" height="254" src="http://www.capponcino.it/alessio/files/sviluppo/webQam/thumb_webQam.jpg" width="326" /></a> 
</div>
<div style="text-align: left">
&#160;
</div>
<div style="text-align: left">
It&#39;s just a preview of my new project.. webQam! It&#39;s a Qt/C++ project (<strong>obviously</strong>) that show and organize your preferred web cams inside a easy system tray icon!
</div>
<div style="text-align: left">
&#160;
</div>
<div style="text-align: left">
Coming soon! <br />
</div>
				]]>
			</description>
		</item>
		<item>
			<title>Quanti bei ricordi!</title>
			<link>http://www.capponcino.it/alessio/diary.php?show=139</link>
			<comments>http://www.capponcino.it/alessio/diary.php?show=139</comments>
			<pubDate>Thu, 30 Apr 2009 19:57:00 +0200</pubDate>
			<dc:creator>Slux</dc:creator>
			<category>Dal passato</category>
			<guid>http://www.capponcino.it/alessio/diary.php?show=139</guid>
			<description>
				<![CDATA[
					<div style="text-align: center">
<a href="http://www.youtube.com/watch?v=ffUMWMvDeu8" >YouTube Link</a>
	<!--param name="movie" value="http://www.youtube.com/watch?v=ffUMWMvDeu8" />
	<param name="wmode" value="transparent" />
</object-->
</div>
<p>
Slux
</p>
				]]>
			</description>
		</item>
		<item>
			<title>Una delle canzoni piu&#039; belle mai sentite!</title>
			<link>http://www.capponcino.it/alessio/diary.php?show=138</link>
			<comments>http://www.capponcino.it/alessio/diary.php?show=138</comments>
			<pubDate>Thu, 19 Mar 2009 17:00:00 +0100</pubDate>
			<dc:creator>Slux</dc:creator>
			<category>Music</category>
			<guid>http://www.capponcino.it/alessio/diary.php?show=138</guid>
			<description>
				<![CDATA[
					<div style="text-align: center">
<a href="http://www.youtube.com/watch?v=rP39CucYxMs" >YouTube Link</a>
	<!--param name="movie" value="http://www.youtube.com/watch?v=rP39CucYxMs" />
	<param name="wmode" value="transparent" />
</object-->
</div>
<p>
Slux
</p>
				]]>
			</description>
		</item>
		<item>
			<title>Nokia E66 software version 210.21.007 released</title>
			<link>http://www.capponcino.it/alessio/diary.php?show=137</link>
			<comments>http://www.capponcino.it/alessio/diary.php?show=137</comments>
			<pubDate>Wed, 18 Mar 2009 14:37:00 +0100</pubDate>
			<dc:creator>Slux</dc:creator>
			<category>Nokia</category>
			<guid>http://www.capponcino.it/alessio/diary.php?show=137</guid>
			<description>
				<![CDATA[
					<img align="left" alt="nokia e66" height="289" src="http://www.capponcino.it/alessio/files/blog/nokia_e66.jpg" width="228" /> 
<p style="margin: 3px; padding: 3px">
Disponibile da oggi il nuovo firmware versione 210.21.007!
</p>
<div align="right" style="clear: both">
Slux
</div>
				]]>
			</description>
		</item>
		<item>
			<title>20 anni di WWW!</title>
			<link>http://www.capponcino.it/alessio/diary.php?show=136</link>
			<comments>http://www.capponcino.it/alessio/diary.php?show=136</comments>
			<pubDate>Fri, 13 Mar 2009 16:16:00 +0100</pubDate>
			<dc:creator>Slux</dc:creator>
			<category>Web</category>
			<guid>http://www.capponcino.it/alessio/diary.php?show=136</guid>
			<description>
				<![CDATA[
					<p>
Oggi il World Wide Web compie ben 20 anni! Ecco la prima pagina web mai esistita.
</p>
<div style="text-align: center">
<a href="http://www.capponcino.it/alessio/files/blog/Prima_pagina_del_Web.jpg" title="Zoom"><img alt="prima pagina web" height="155" src="http://www.capponcino.it/alessio/files/blog/Prima_pagina_del_Web.jpg" title="Zoom" width="253" /></a>
</div>
<div style="text-align: center">
&#160;
</div>
<div align="right">
Slux
</div>
				]]>
			</description>
		</item>
		
	</channel>
</rss>