MT5 y trans2quik.dll - página 6

 
prostotrader:

No, sólo necesito sincronizar 3 hilos (básicamente escribir un sincronizador), pero

No sé cómo.

Bueno, sólo quedan las banderas. Colocamos una bandera, esperamos a que los demás terminen las actividades, nos detenemos y retiramos sus banderas, hacemos cosas, retiramos la bandera. Bueno, y la lógica de la prioridad de la bandera, obviamente.

Yo no detendría el DDE, sino que dejaría que escribiera en el buffer para que no se perdiera nada.

 
Yuriy Asaulenko:

Bueno, eso deja sólo las banderas. Poner una bandera, esperar a que los demás terminen sus actividades, parar y quitar sus banderas, hacer el negocio, quitar la bandera. Bueno, y la lógica de la prioridad de la bandera, obviamente.

Sin embargo, yo no detendría el DDE, dejaría que escribiera en el buffer para que no se perdiera nada.

En otras palabras, el Sincronizador debe almacenar en el búfer las funciones entrantes que se ejecutarán dependiendo de la prioridad?

 
prostotrader:

¿Así que el Sincronizador necesita almacenar en el búfer las funciones entrantes que se ejecutarán dependiendo de la prioridad?

No, sólo suspende el hilo o los hilos según las banderas correspondientes y su prioridad. En esta variante, no se necesita nada más.

La segunda opción es esperar a que la función del hilo termine, y entonces detenerlo por su bandera. Esto puede ser necesario, por ejemplo, para actualizar el asc-bid, los indicadores y cualquier otra cosa que necesitemos.

Por ejemplo, los valores de las banderas.

0 - el hilo está inactivo,

1 - el hilo está encendido,

2 - solicitar la detención de todos los hilos con menor prioridad.

Ponerlo a 2 y esperar a que todos los hilos se conviertan en 0, ejecutar el programa y ponerlo a 0 o 1. Con esta bandera, todos los demás hilos reanudan su trabajo.

 
Yuriy Asaulenko:

No, sólo suspender el hilo o los hilos por las banderas pertinentes y su prioridad. Esta opción no requiere nada más.

La segunda opción es esperar hasta que la función del hilo termine y entonces detenerlo por su bandera. Esto puede ser necesario, por ejemplo, para actualizar el asc-bid, los indicadores y cualquier otra cosa que necesitemos.

Por ejemplo, los valores de las banderas.

0 - el hilo está inactivo,

1 - el hilo está encendido,

2 - solicitar la detención de todos los hilos con menor prioridad.

Ponerlo a 2 y esperar a que todos los hilos se conviertan en 0, ejecutar el programa y ponerlo a 0 o 1. Con esta bandera, todos los demás hilos reanudan su trabajo.

Usted mismo escribió que no es bueno suspender el DDE

 
prostotrader:

Usted mismo escribió que no es bueno suspender un DDE

No te entiendo.

Lo que hago es esto.

1.El servidor (tengo TCP-servidor) en su hilo escribe constantemente datos a la colección como último en entrar primero en salir. No hay necesidad de detenerlo.

Los datos se leen/borran de la colección en otro hilo y se escriben en DataTable (es análogo a la tabla de la base de datos, pero en memoria). Este hilo puede quedar en pausa, si estorba.

3. Otro hilo lee los datos de DataTable para su análisis. Este hilo no interfiere con el hilo 2 ya que está siendo recuperado por select y nadie excepto 2 escribe datos en esta tabla. También puedes parar este hilo si te estorba.

No tengo que pausar nada, porque trabajo con una herramienta y el hilo 3 está cambiado para enviar-ejecutar órdenes y seguir ofertas.

 
Yuriy Asaulenko:

No te entiendo.

Lo que hago es esto.

1.El servidor (tengo un servidor TCP) en su hilo escribe constantemente datos a la colección como último en entrar primero en salir. No hay necesidad de detenerlo.

Los datos se leen/borran de la colección en otro hilo y se escriben en DataTable (es análogo a la tabla de la base de datos, pero en memoria). Este hilo puede quedar en pausa, si estorba.

3. Otro hilo lee los datos de DataTable para su análisis. Este hilo no interfiere con el hilo 2 ya que está siendo recuperado por select y nadie excepto el 2 realiza escrituras en esta tabla. También puedes parar este hilo si te estorba.

No tengo que pausar nada ya que trabajo con una herramienta y el hilo 3 se cambia a enviar-ejecutar órdenes y seguir ofertas.

Qué suerte, tengo 52 herramientas, así que tengo que cambiar

 
prostotrader:

Estás de suerte, tengo 52 instrumentos, así que tengo que cambiar

¿Supongo que el análisis de los 52 instrumentos se hace en un hilo? ¿O no?

¿Qué se utiliza como almacén? En mi caso, con el acceso multiusuario, el bloqueo es innecesario y la lectura no interfiere con la escritura.

Lo único que hay que bloquear es el acceso compartido de Child a trans2quik. Y sólo en caso de conjunto de hilos Niño. Puede hacerlo organizando trans2quik en un hilo separado y llamarlo en el evento y simultáneamente bloquear el manejador del evento hasta que la solicitud haya terminado. El resto no puede llegar).

 
prostotrader:

Abandoné completamente la idea de enlazar MT5 y Kvik, me conformé con Kvik solamente (servidor DEE + trans2quik.dll)

Qué pena. ¿Cuál es el motivo de esta decisión? ¿Existe algún obstáculo serio en la recepción/transmisión de datos entre los dos programas?

 
Yuriy Asaulenko:

¿Supongo que el análisis de los 52 instrumentos se realiza en un solo flujo? ¿O no?

¿Qué se utiliza como almacén? En mi caso, con el acceso multiusuario, el bloqueo es innecesario y la lectura no interfiere con la escritura.

Lo único que hay que bloquear es el acceso compartido de Child a trans2quik. Y sólo en caso de conjunto de hilos Niño. Puede hacerlo organizando trans2quik en un hilo separado y llamarlo en el evento y simultáneamente bloquear el manejador del evento hasta que la solicitud haya terminado. El resto no llegará a él).

No, el análisis en sí tiene lugar en Child (por separado, para cada herramienta) Selector(1,2) elige a qué robot enviar los datos y los colbucks

Almacenamiento - sólo tablas que se almacenan en la memoria

 
Aleksey Vyazmikin:

Es una pena. ¿Cuál es la razón de esta decisión, hay algún obstáculo serio para recibir/transmitir datos entre los dos programas?

No tiene sentido hacer un lío.

Usando MT5 necesitamos un código en el Asesor Experto y una DLL, que recibirá los datos.

Usando sólo Quick, tenemos una sola aplicación (ver figura con diagrama)