IIC2233 / Syllabus-2024-1

79 stars 10 forks source link

Duda sobre error QThread: Destroyed while thread is still running #592

Open milaph opened 3 months ago

milaph commented 3 months ago

Prerrequisitos

(Marcar colocando una X entre los corchetes los ítems que ya hiciste, así: "[X]")

Duda

[Describe tu duda de manera detallada, explicando qué cosas aparecen en el enunciado y cuáles no]

[De ser necesario, coloca tu pregunta de manera explícita utilizando este formato] Hola, estaba creando las sandias como Qthreads, sin embargo al momento de correr el programa me aparece este error QThread: Destroyed while thread is still running y el programa se cierra. Sin embargo, no se porque esto ocurre ni que hacer para solucionarlo, si me podrían dar un consejo lo agradecería mucho

VAMarques commented 2 months ago

El error parece que suele pasar cuando se elimina de la memoria la implementacion de un objeto de Qt, los cuales estan hechos en C++, pero que los usamos mediante la "API" si le podemos decir asi, que es PyQt.

Entonces por ejemplo si creas una funcion que crea un objeto de PyQt, pero esta funcion define los objetos dentro de la misma funcion, al terminarse el metodo de la funcion se eliminara de la memoria lo que creaste en la funcion.

Para evitar esto, tienes que hacer que estos objetos que crees dependan de un objeto superior, la ventana principal, laberinto, algo asi.

Fuentes:

Con esto vi que los objetos de PyQt son objetos de C++ que pueden ser eliminados de memoria si no se tiene cuidado.

Aca se menciona un metodo para PyQt5 (Habria que revisar si tambien funciona para PyQt6) para arreglar el error, tendrias que usar QThread(parent=self).

Si consideras necesario podrias citar estos hilos de StackOverflow en la tarea (Considerando que hay hasta el viernes para entregar con atraso).

VAMarques commented 2 months ago

image Esto es una reproduccion del error, si haces algo asi en una clase con PyQt te saldra el mismo error.

Entonces al implementar lo que salio en StackOverflow, añadiendole el (self): image Se arregla el error.