¿Cómo determinar si el objeto del hilo ha sido liberado?
2. Utilice while en run() para juzgar este identificador y finalizar el objeto socket.
3. En el destructor del hilo, establezca la bandera y use quit() y wait().
El código es el siguiente:
Subproceso de socket UDP::Subproceso de socket UDP (objeto q * padre):
QThread (padre)
{
Esto -> socket = 0;
Esto -> needStop = false
}
Subproceso de socket UDP: : ——Subproceso de socket UDP()
{
Esto - gt; needStop = true
quit();
wait( ) ;
}
void UdpSocketThread::run()
{
socket = nuevo QUdpSocket
conectar (socket, SEÑAL(readyRead()), this, SLOT(readPendingDatagrams());
Socket->bind(2234);
exec();
p>
while(this- gt; needStop)
{
if (this- gt; socket)
{
Eliminar esto -> socket;
Esto -> socket=0;
}
Romper;
}< / p>
}
La publicación de este objeto de hilo es representativa y debería poder resolver muchos problemas similares.
Además, puede haber otros métodos. solo uno.
De hecho, la clave del problema es que los objetos creados en el hilo deben liberarse en el hilo.
Después de la corrección de Shiroki, QT. un mejor mecanismo para liberar objetos es eliminarLater() Entonces, las cosas son muy simples, mire el código:
Subproceso de socket UDP (objeto q * padre):
QThread (padre)
{
socket = 0;
}
Subproceso de socket UDP::— —Subproceso de socket UDP()
{
Esto-gt; socket-gt; eliminar más tarde();
salir();
esperar();
}
void UdpSocketThread::run()
{
socket = nuevo QUdpSocket
conectar( socket, SEÑAL(readyRead()), this, SLOT(readPendingDatagrams());
Socket - gt; bind(2234);
exec();
}