QT线程的设计,有两种常见的模式:
模式1:
void run()
{
<span style="white-space:pre"> </span>while(!stop){
<pre name="code" class="cpp"><span style="white-space:pre"> </span>// do something
<span style="white-space:pre"> </span>}
}
模式2:
void run()
{
// do something
<span style="white-space:pre"> </span>exec();
}
而在模式2中,可以使用信号和槽,因为有exec().
模式1:
void run()
{
<span style="white-space:pre"> </span>socket = new QTcpSocket;
<span style="white-space:pre"></span><pre style="margin-top: 0px; margin-bottom: 0px;"><span style="white-space:pre"> </span>connect(<span style="color: rgb(128, 128, 0);">this</span>,<span style="color: rgb(128, 128, 0);">SIGNAL</span>(finished()),<span style="font-family: Arial, Helvetica, sans-serif; color: rgb(128, 0, 0);">socket</span><span style="font-family: Arial, Helvetica, sans-serif;">,</span><span style="font-family: Arial, Helvetica, sans-serif; color: rgb(128, 128, 0);">SLOT</span><span style="font-family: Arial, Helvetica, sans-serif;">(deleteLater()));</span>
while(!stop){
<pre name="code" class="cpp"><span> </span>// do something
socket->connectToHost(QHostAddress::LocalHost,1234);
socket->waitForConnected(3000);
<span> </span>}
}
模式2:
void run()
{
<pre name="code" class="cpp"><span style="white-space:pre"> </span>socket = new QTcpSocket;
<span></span><pre style="margin-top: 0px; margin-bottom: 0px;"><span style="white-space:pre"> </span>connect(<span style="color: rgb(128, 128, 0);">this</span>,<span style="color: rgb(128, 128, 0);">SIGNAL</span>(finished()),<span style="font-family: Arial, Helvetica, sans-serif; color: rgb(128, 0, 0);">socket</span><span style="font-family: Arial, Helvetica, sans-serif;">,</span><span style="font-family: Arial, Helvetica, sans-serif; color: rgb(128, 128, 0);">SLOT</span><span style="font-family: Arial, Helvetica, sans-serif;">(deleteLater()));</span>
// do something
<span style="white-space:pre"></span><pre style="margin-top: 0px; margin-bottom: 0px;"><span style="color: rgb(128, 0, 0);"><span style="white-space:pre"> </span>socket</span>->connectToHost(<span style="color: rgb(128, 0, 128); font-family: Arial, Helvetica, sans-serif;">QHostAddress</span><span style="color: rgb(128, 0, 128); font-family: Arial, Helvetica, sans-serif;">::</span><span style="color: rgb(128, 0, 128); font-family: Arial, Helvetica, sans-serif;">LocalHost</span>,1234);
connect(socket,
</pre><pre name="code" class="cpp"><span> </span>exec();
}