关于QT线程的的信号与槽

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();

}


在模式1中,不要使用信号和槽,因为线程中创建的对象,事件槽在线程的事件循环中,需要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();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值