我們先定義一個線程類類:textTread
texttread.h
view source#define TEXTTREAD_H
<code>04.</code><code>#include <<a href="http://blog.51cto.com/user_index.php?action=addblog_new" target="_blank" class="keylink">QT</a>hread></code>
<code>05.</code>
<code>06.</code><code>class</code> <code>textTread : </code><code>public</code> <code><a href=</code><code>"http://blog.51cto.com/user_index.php?action=addblog_new"</code> <code>target=</code><code>"_blank"</code> <code>class</code><code>=</code><code>"keylink"</code><code>>QT</a>hread</code>
<code>07.</code><code>{</code>
<code>08.</code><code>Q_OBJECT</code>
<code>09.</code><code>public</code><code>:</code>
<code>10.</code><code>textTread();</code>
<code>11.</code><code>void</code> <code>run();</code>
<code>12.</code><code>signals:</code>
<code>13.</code><code>void</code> <code>sendGUIThreadData(QString str); </code><code>//向主線程通信的信号</code>
<code>14.</code><code>public</code> <code>slots:</code>
<code>15.</code><code>void</code> <code>GetGUIThreadID(</code><code>int</code> <code>mThreadID); </code><code>//接受主線程通訊過來資料的槽</code>
<code>16.</code><code>private</code><code>:</code>
<code>17.</code><code>int</code> <code>ThreadID;</code>
<code>18.</code><code>};</code>
<code>19.</code>
<code>20.</code><code>#endif // TEXTTREAD_H</code>
再來看 texttread.cpp
view sourceprint?
<code>01.</code><code>#include </code><code>"texttread.h"</code>
<code>02.</code><code>#include <qDebug></code>
<code>03.</code><code>textTread::textTread()</code>
<code>04.</code><code>{</code>
<code>05.</code><code>}</code>
<code>06.</code><code>void</code> <code>textTread::run()</code>
<code>08.</code><code>qDebug() << tr(</code><code>"Thread is Open,ThreadID : %1"</code><code>).arg(ThreadID);</code>
<code>09.</code><code>//You can do anything in here 嗨嗨拽兩句鳥文</code>
<code>10.</code><code>}</code>
<code>11.</code><code>void</code> <code>textTread::GetGUIThreadID(</code><code>int</code> <code>mThreadID) </code><code>//接受主線程通訊過來的資料</code>
<code>12.</code><code>{</code>
<code>13.</code><code>ThreadID = mThreadID;</code>
<code>14.</code><code>}</code>
再看在GUI主線程實作50個線程的代碼:
<code>01.</code><code>const</code> <code>int</code> <code>LENGTH = 50;</code>
<code>02.</code>
<code>03.</code><code>textTread *tread;</code>
<code>04.</code><code>tread = </code><code>new</code> <code>textTread[LENGTH];</code>
<code>05.</code><code>for</code><code>(</code><code>int</code> <code>i=0;i<=LENGTH-1;i++){</code>
<code>06.</code><code>connect(</code><code>this</code><code>,SIGNAL(SendGUIThreadID(</code><code>int</code><code>)),&tread[i],SLOT(GetGUIThreadID(</code><code>int</code><code>)));</code>
<code>07.</code><code>connect(&tread[i],SIGNAL(sendGUIThreadData(QString)),</code><code>this</code><code>,SLOT(GetGUIThreadData(QString)));</code>
<code>08.</code><code>emit SendGUIThreadID(i);</code>
<code>09.</code><code>tread[i].start();</code>
聲明類的指針數組。
然後循環綁定信号與槽,最後循環用Start()運作線程,注意此處new 出的類數組,後面用的是.而不是-> 。