![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Problemas con Threads
Hola a todos, me encuentro en un nuevo dile, estoy migrando un programa que tengo en Delphi 2010 a Delphi XE5, en el cual solo marca 2 errores:
[dcc32 Error] GenericBlockingQueue.pas: E2089 Invalid typecast El código en donde marca el error es el siguiente:
La declaración del thread se encuentra de la siguiente manera:
La verdad, no entiendo muy bien los threads y me gustaría saber si podrían ayudarme. De antemano gracias ![]() Última edición por Casimiro Notevi fecha: 07-09-2016 a las 01:03:21. |
#2
|
||||
|
||||
Creo que el codigo quedo incompleto porque usas genericos, de lo contrario no compilaria
(Es un error del foro que Casimiro no quiere arreglar ![]() Asumiendo TBlockingQueueContentHandler <T>, el compilador no tiene informacion suficiente para poder comparar un generico T contra nil. Que pasaria si usara la cola asi: TBlockingQueueContentHandler <Integer>? o TBlockingQueueContentHandler <TAlgunRecord>? Esos tipos no se pueden comparar contra nil Lo que podes hacer es darle mas informacion al compilador, estableciendo constraints, que vendrian a ser restricciones Los constraint se indican seguidos de : (dos puntos) luego de la declaracion del generico, por ejemplo: TBlockingQueueContentHandler <T: class> --> indica que el tipo generico T es una clase (no podria ser un Integer, por ejemplo) Revisa la documentacion para mas informacion |
#3
|
|||
|
|||
Hola AgustinOrtu, antes que nada agradezco tu pronta respuesta, efectivamente hacen falta los <T> en varias partes :P
Revisare bien el código y daré una leída a lo que me has pasado, en cuanto tenga la solución pasaré a informar, así como cualquier problema que me encuentre (si se da el caso) en el proceso. Solo una duda, este cambio es debido a que así se implementa en XE5? Por que en 2010 funciona sin problemas. |
#4
|
||||
|
||||
Cita:
Creo recordar que si se ponen espacios "se los traga"
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#5
|
|||
|
|||
Que tal, buenos días a todos, vengo a comentarles que ya encontré la solución, hice unas modificaciones al código.
Código que daba errores:
Código modificado:
Una vez hechos esos cambios, el programa compilo sin problema ![]() Muchas gracias a AgustinOrtu por su ayuda ![]() |
#6
|
||||
|
||||
Y funciona bien? Veo demasiados casteos no seguros en ese codigo
![]() No se puede resolver usando constraints como dije mas arriba? la clase TObjectList de Generics.Collections lo hace de esa manera:
|
#7
|
|||
|
|||
Intenté con los constraints, pero era cambiar muchas declaraciones y otras partes del código.
Hice pruebas con los cambios que realice y todo funciona bien, igualmente, haré un branch nuevo y haré todos los cambios que me pide que haga usando los constraints. |
#8
|
||||
|
||||
Es mas que nada para que tu codigo quede mas seguro
![]() Esos cast forzosos son un peligro, y deberian evitarse a menos que sea como ultimo recurso; este no es el caso. Otra cosa muy peligrosa es el operador '@', el principal problema que tiene es que de esa forma el compilador se pasa por encima el checkeo de tipos (todo vale) y te estas perdiendo una de las grandes ventajas de un lenguaje compilado, que detecta estos errores y te ahorran problemas al momento de correr tu aplicacion Fijate que estas casteando la direccion de memoria de tu parametro a un puntero a TObject y luego accediendo al TObject referenciado por el puntero. Es como demasiado "hardcore" ![]() ![]() |
#9
|
|||
|
|||
Hola...
Cita:
Saludos... |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Problemas con Threads | gluglu | Varios | 13 | 10-02-2011 10:26:36 |
uso de threads | JULIPO | API de Windows | 2 | 25-07-2007 16:09:06 |
Threads in DLL's | Gianni | Varios | 0 | 20-07-2007 22:18:23 |
Threads zombies | Archer | Varios | 1 | 25-09-2006 19:19:38 |
problemas con threads dentro de un componente | elcigarra | OOP | 26 | 26-05-2005 04:29:35 |
![]() |
|