天天看点

QT多线程类数组同时开启几十个线程

我们先定义一个线程类类:textTread

texttread.h

view source#define TEXTTREAD_H 

<code>04.</code><code>#include &lt;&lt;a href="http://blog.51cto.com/user_index.php?action=addblog_new" target="_blank" class="keylink"&gt;QT&lt;/a&gt;hread&gt;</code>

<code>05.</code> 

<code>06.</code><code>class</code> <code>textTread : </code><code>public</code> <code>&lt;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>&gt;QT&lt;/a&gt;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 &lt;qDebug&gt;</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() &lt;&lt; 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&lt;=LENGTH-1;i++){</code>

<code>06.</code><code>connect(</code><code>this</code><code>,SIGNAL(SendGUIThreadID(</code><code>int</code><code>)),&amp;tread[i],SLOT(GetGUIThreadID(</code><code>int</code><code>)));</code>

<code>07.</code><code>connect(&amp;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 出的类数组,后面用的是.而不是-&gt; 。