¿Existe alguna documentación sobre la comunicación de hilos cruzados en Delphi? ¿Cómo puedo enviar un mensaje al hilo que no tiene una ventana?Comunicación de hilo cruzado en Delphi
Respuesta
Solo puede enviar mensajes (Windows) a hilos que implementen un bucle de mensaje estándar, que se creará automáticamente una vez que se haya realizado el control de ventana.
Sin embargo, no es necesario utilizar mensajes para comunicarse con un hilo. Simplemente déjalo esperar en un objeto de evento (TEvent en VCL), e indica este evento cuando quieras que el hilo realice una función.
Pero si es nuevo en multi-threading, no profundice en todos estos detalles, a menos que desee obtener el efecto de aprendizaje. Solo use el OmniThreadLibrary y termine con eso. Se puede aprender mucho profundizando en sus partes internas, una vez que sepa cómo usarlo.
Editar:
Ver también las respuestas a this question que es muy similar.
Edición 2:
En cuanto al comentario preguntar "¿Qué [OmniThreadLibrary] hacer más fácil, ya qué costo?" Solo puedo aconsejarle que lo compruebe usted mismo, es decir, si está utilizando al menos Delphi 2007. Hay varias muestras para ilustrar los conceptos, pero para un ejemplo rápido de "vida real", puede consultar this blog post - ni siquiera necesita instalar la biblioteca para eso.
También estoy de acuerdo que el uso de una biblioteca para multi-threading requiere un cierto acto de fe. OTOH arreglándose con lo que ofrece el VCL es apenas una alternativa. El código de ejemplo todavía usa la llamada Synchronize() mal concebida. No hay soporte para cosas como colas productor-consumidor-hilo seguro, que son mucho más adecuadas para la programación de subprocesos múltiples. Y si está de acuerdo en que necesita un fundamento más sólido para sus programas de subprocesos múltiples que lo que ofrece el VCL, ¿por qué reinventar esa rueda en particular?
En cuanto al costo de usar la biblioteca: Tendrá que cronometrar si es lo suficientemente rápido para usted. Resumen la comunicación entre los hilos de una buena manera en mi humilde opinión, pero cada abstracción cuesta el rendimiento, obviamente.
Si decide que no es para usted, escriba el código usted mismo. Hice lo mismo con Delphi 4, y he estado usando ese código durante casi 10 años. Y a juzgar por la cantidad de errores que encontré y casos de esquina que experimenté en ese momento, definitivamente recomendaría a cualquier persona nueva en multi-threading a no escribir su propio código de biblioteca para ello. Y si realmente realmente desea, por favor, tome las reglas en this posting en el corazón.
La pregunta Delphi Multi-Threading Message Loop también contiene algunos ejemplos de comunicación entre hilos
Si usted tiene una referencia al objeto hilo, sólo puede llamar a dirigir, y tener la información del almacén procedimiento o actualizar en consecuencia. Obviamente, debes tener cuidado de hacer las cosas de manera segura.
Como alternativa, podría usar un objeto de control central a través del cual los hilos se comunican cuando no están ocupados. Tengo una aplicación donde los hilos tienen propósitos particulares, y se les asigna un ID de hilo.Cualquier hilo puede "publicar" un mensaje con un ID de mensaje y una cadena de parámetros en otro ID de hilo y luego continuar con su trabajo. El otro hilo lo recoge en su tiempo libre, y actúa en consecuencia.
- 1. Userscript en Chrome, comunicación de origen cruzado
- 2. Reemplazo WCF para proceso cruzado/comunicación de máquina
- 3. Buscando un marco de comunicación para delphi
- 4. Cómo matar un hilo en delphi?
- 5. ¿Reanudar hilo suspendido en Delphi 2010?
- 6. Comunicación entre hilos. ¿Cómo enviar una señal a otro hilo
- 7. Cómo pasar la excepción de un hilo a otro (el que llama) el hilo en Delphi?
- 8. Comunicación de Java Inter Process y comunicación Inter Thread?
- 9. Delphi: tiempo de suspensión del hilo de ajuste
- 10. "Operación de hilo cruzado no válida" excepción en los controles internos
- 11. Comunicación interproceso productor-consumidor
- 12. HTML5 - Mensaje posterior del iframe del navegador cruzado - comunicación entre padres
- 13. Comunicación entre dos hilos
- 14. Producto cruzado en MapReduce
- 15. Comunicación entre hilos en PySide
- 16. Comunicación TCP asíncrona en .NET
- 17. Cookies de dominio cruzado
- 18. Comunicación en serie de Python
- 19. Comunicación de proceso en Python
- 20. Comunicación entre la aplicación delphi y el controlador del sistema de Windows NT
- 21. Hilo de seguridad manera de incrementar y devolver un número entero en Delphi
- 22. POST ajax de dominio cruzado en cromo
- 23. Bloqueo de proceso cruzado en C#
- 24. video de origen cruzado en Safari
- 25. encabezado de origen cruzado en IE8/IE9
- 26. origen cruzado XMLHttpRequest en extensiones de cromo
- 27. Datos de origen cruzado en canvas HTML5
- 28. Mocking de proceso cruzado en ASP.NET
- 29. MVVM: comunicación
- 30. Sesiones PHP de dominio cruzado
De hecho, use OmniThreadLibrary –
Estoy en la misma situación que el OP. Sé muy poco para saber qué hace OmniThreadLibrary para mí, además de "hacerlo más fácil". ¿Qué hace que sea más fácil y a qué costo? Además, está el tema de las "abstracciones con fugas": si algo sale mal, la lib obstruirá la vista del problema. –
OTL hace algo similar al VCL: oculta la fealdad inherente de trabajar directamente con threads. También le permitirá trabajar directamente con las primitivas de Windows subyacentes tanto como desee (igual que el VCL, nuevamente). Para obtener más información, utiliza http://otl.17slon.com/forum. – gabr