![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
¿Se pueden modificar Global Vars en un TThread?
Hola, de nuevo, amigos del foro.
Nunca había usado hilos en mis aplicaciones. Quizá no fuera necesario. Después de este problema y gracias a dani36652 que me ayudó a resolverlo con un hilo, he visto la utilidad de los mismos. Como digo en el enunciado, me veo en la necesidad de modificar alguna variable que no está declarada en el hilo. Tengo el problema de que no se actualiza al terminar el hilo. Al insistir una o dos veces más termina tomando su correcto valor. Pero esto no es operativo. Se trata de comprobar si una impresora conectada por BlueTooth está operativa o no. Os participo el código que estoy utilizando, por si alguien puede ayudarme. (Conste que antes de solicictar vuestra ayuda llevo 2 dias buscando en internet sin éxito)
Esperando que, si el problema tiene solución y alguien lo sabe, la comparta conmigo. Gracias de antemano. Saludos cordiales.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10) "...si no tengo caridad, nada soy..." (1 Cor 13,1-13) Última edición por jhonalone fecha: 08-10-2023 a las 16:31:11. |
#2
|
||||
|
||||
A falta de que lo confirme alguien más experto, pienso que sí es posible.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#3
|
|||
|
|||
Muchas gracias Casimiro.
Es probable que, el código que has hecho el esfuerzo de confeccionar para aydarme, funcione. No lo he probado. Pero yo necesito cambiar el valor de la variable en el procedure "ImpresoraConectada". Claro, dependiendo del resultado de la comprobación que se hace en dicho procedimiento. ESte procedimiento dentro de "TThread.ForceQueue" (o en su lugar de "TThread.Synchronize" que fue lo primero que probé) Un Sincero saludo.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10) "...si no tengo caridad, nada soy..." (1 Cor 13,1-13) |
#4
|
|||
|
|||
Hola.
Este comportamiento de que no pasa el valor inmediatamente y que lo pasa después en diferido, en la siguiente llamada, me recuerda el comportamiento asincrónico de JavaScript. Allí tenemos la función CallBack para evitarlo. (Si no recuerdo mal) ¿Hay algo parecido aquí? Saludos.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10) "...si no tengo caridad, nada soy..." (1 Cor 13,1-13) |
#5
|
|||
|
|||
Hola, claro que si se puede. Solo que si dicha variable es utilizada por otros hilos más, te recomiendo meter esa asignación en un "Synchronize" todo esto para evitar errores de acceso de memoria o errores de acceso múltiple.
Revisando tu código, hice algunas correcciones y te hago de forma constructiva las siguientes observaciones.
Observé también que mostrabas mensajes y después hacias un exit; puedo intuir que no apreciabas el cambio del valor de la variable por que en algún punto tu app caía en las líneas que mostraban mensajes pero como no sincronizabas con el hilo principal, no se veía nada y no cambiaba la variable por el exit antes mencionado. Te dejo más o menos cómo quedaría tu código y como comentario final, no olvides que la impresión tanto en Android como en Windows siempre debe llamarse en el Hilo principal. Si haces eso desde otro hilo aplica algo como esto para que se ejecute en el hilo principal
//Tu código
Última edición por dani36652 fecha: 09-10-2023 a las 20:46:37. |
#6
|
|||
|
|||
Hola, Dani.
Agradezco infinito el esfuerzo que has hecho para corregir mi código. Gracias a ti estoy empezando a conocer los hilos (TThread) que no había usado nunca. Anoche he corregido mi código con tus modificaciones. No te he respondido antes, porque estoy intentando ver cómo hacerlo funcionar. Lo implementé con una ilusión tremenda y con una confianza total. Pero al probarlo en el móvil y la impresora me da el mismo problema que antes. Es decir el TThread no modifica instantáneamente el valor de la variable boleana "ResultadoImpresora", lo hace a la segunda vez (como lo hacía antes). No me lo podía creer. He cambiado la variable boleana por otra variable visual, por una TLabel, y sigue el problema igual. Este es el motivo de que no te haya responedido antes: he estado probando cómo conseguirlo. Bueno, algo hemos conseguido: la respuesta es bastante más rápida. Sigo probando... Si consigo algo lo comunicaré para que le aproveche a quien tenga el mismo problema. Un Saludo muy cordial.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10) "...si no tengo caridad, nada soy..." (1 Cor 13,1-13) Última edición por jhonalone fecha: 10-10-2023 a las 15:55:08. |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Salir de TThread | joseprad | Varios | 4 | 03-01-2015 16:43:36 |
FTP y TThread | keys | Internet | 4 | 01-06-2011 08:12:43 |
TThread y componentes de red | noob | OOP | 0 | 18-04-2009 01:25:07 |
File_get_contents & POST Vars | Delar | PHP | 2 | 17-10-2007 17:15:31 |
Lio con TThread | diegofhernando | Varios | 0 | 20-01-2004 17:58:35 |
![]() |
|