Pregunta

¿Hay alguna documentación sobre la comunicación entre hilos en Delphi? ¿Cómo puedo enviar un mensaje al hilo que no tiene una ventana?

¿Fue útil?

Solución

Solo puede enviar mensajes (Windows) a subprocesos que implementan un bucle de mensajes estándar, que se creará automáticamente una vez que se realice un identificador de ventana.

Sin embargo, no es necesario usar mensajes para comunicarse con un hilo. Simplemente déjelo esperar en un objeto de evento (TEvent en VCL) y señale este evento cuando desee que el hilo realice una función.

Pero si eres nuevo en multi-threading, no entres en todos estos detalles por tu cuenta, a menos que quieras para el efecto de aprendizaje. Simplemente use el OmniThreadLibrary y termine de usarlo. Hay mucho que aprender aprendiendo en su interior, una vez que sepa cómo usarlo.

Edición :

Consulte también las respuestas a esta pregunta que es muy similar.

Editar 2:

Con respecto al comentario preguntando "¿Qué facilita [OmniThreadLibrary] y a 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 una "vida real" rápida. ejemplo, puedes echar un vistazo a esta publicación de blog : ni siquiera necesita instalar la biblioteca para eso.

También estoy de acuerdo en que usar una biblioteca para subprocesos múltiples requiere un cierto acto de fe. OTOH hacer lo que ofrece el VCL no es una alternativa. El código de muestra todavía utiliza la llamada Synchronize () mal concebida. No hay soporte para cosas como colas de productor-consumidor seguras para subprocesos, 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 multiproceso que el que ofrece VCL, ¿por qué reinventar esa rueda en particular?

En cuanto al costo de usar la biblioteca: Tendrá que calcular si es lo suficientemente rápido para usted. Sí abstrae la comunicación entre hilos en el buen sentido de mi humilde opinión, pero cada abstracción cuesta rendimiento, obviamente.

Si después de todo decide que no es para usted, escriba el código usted mismo. Hice lo mismo para 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 los casos de esquina que experimenté en ese momento, definitivamente recomendaría a cualquiera que sea nuevo en subprocesos múltiples que no escriba su propio código de biblioteca. Y si realmente realmente quiere, tome las reglas en esta publicación al corazón.

Otros consejos

La pregunta Delphi Multi-Threading Message Loop también contiene algunos ejemplos de comunicación entre hilos

Si tiene una referencia al objeto de subproceso, puede llamarlo directamente y hacer que el procedimiento almacene información o actualice en consecuencia. Obviamente, debes tener cuidado de hacer las cosas de manera segura para hilos.

Alternativamente, puede 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 para otro ID de hilo y luego continuar con su trabajo. El otro hilo lo recoge a su antojo y actúa en consecuencia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top