Errores, fallos, preguntas - página 651

 
mql5:
No, no es sólo un problema de los terminales de 32 bits. Pero la solución para el terminal de 32 bits está lista para hoy mientras que en el terminal de 64 bits todavía hay una limitación de pila en 256Kb.
Pero si el programador no especifica el tamaño de pila necesario manualmente usando una propiedad, el EX5 en el terminal trabajará con el tamaño de pila por defecto ( 256Kb).

Sobre el tamaño grande.
Cada declaración de variable dentro de una función (excepto las variables estáticas) asigna espacio en la pila, y la asignación de espacio en la pila para las variables locales se produce en cada llamada.

Por lo tanto, si una función tiene variables locales de 64Kb, el espacio de la pila es suficiente para 3 llamadas, y el desbordamiento de la pila se produce a las 4 llamadas (ya que parte de la pila se utiliza para las necesidades internas del terminal). Por lo tanto, si hay una necesidad de datos locales grandes, es mejor utilizar la memoria dinámica - cuando se entra en la función, la memoria para las necesidades locales se asigna en el sistema (new, ArrayResize) y cuando se sale de la función, la memoria se elimina (delete, ArrayFree).

Gracias por la detallada explicación. Pero definitivamente ese no es mi problema. Intentaré escribir un Expert Advisor de prueba para detectar este error, ya que la función en la que crecen las patas ya se encuentra y no hay tales volúmenes (64Kb - 256Kb). Enviaré a un experto al Servicio de Atención al Cliente con la función del problema por la noche entonces.

 

Una pregunta más (y una petición de explicación en la ayuda) sobre el trabajo de la misma función(CLBufferWrite()).

Si escribo la información directamente desde el buffer del indicador con la bandera ArrayIsSeries activada (==true), ¿en qué dirección se leerá el array de entrada?

Sospecho que la bandera será ignorada, y además no está claro desde qué lugar se leerá... ¿El desplazamiento se contará desde el final físico del array o desde el principio?

Por supuesto, voy a soplar en el agua por si acaso (voy a trabajar con ArrayIsSeries== false), pero todavía ?

 
La funcionalidad de trabajar con el buffer OpenCL está actualmente incompleta y será añadida/descrita.
offset - estas funciones son realmente offsets en bytes desde el principio del buffer OpenCL y el array pasado a la función será copiado desde el elemento nulo sin tener en cuenta la bandera ArrayIsSeries.
 
mql5:
1) Actualmente, la funcionalidad de trabajar con el buffer OpenCL no está completa y será añadida/actualizada.
2. offset - estas funciones son en realidad un offset en bytes desde el principio del buffer OpenCL mientras que un array pasado a la función será copiado desde el elemento cero sin tener en cuenta la bandera ArrayIsSeries.

1. Más o menos lo sospechaba... :)

Por lo tanto, no hay manera de escribir directamente desde el búfer del indicador en partes (por ahora).

Una buena idea es, por supuesto, hacer que las posiciones de partida sean móviles tanto en la fuente como en el receptor. Como aquí:

int  ArrayCopy(
   void  dst_array[],       // куда копируем
   void  src_array[],       // откуда копируем
   int   dst_start=0,       // с какого индекса пишем в приемник
   int   src_start=0,       // с какого индекса копируем из источника
   int   cnt=WHOLE_ARRAY    // сколько элементов
   );

Con la indexación (dirección y unidades (bytes/elementos)) por favor sea más cuidadoso en la ayuda. :)))

--

Gracias por la respuesta, realmente aprecio sus esfuerzos para mejorar la funcionalidad.

Esperaré pacientemente a que continúe el banquete. Mientras tanto, tendré que bailar en el filo de una daga. :)

 

Build 597 x64, recién instalado.

2012.02.23 21:43:24 OpenCLTest (EURUSD,M30) SaveBitmapToFile error al abrir 'Mandelbrot.bmp'
2012.02.23 21:43:13 OpenCLTest (EURUSD,M30) SaveBitmapToFile error al abrir 'Mandelbrot.bmp'
2012.02.23 21:43:12 OpenCLTest (EURUSD,M30) SaveBitmapToFile error al abrir 'Mandelbrot.bmp'
2012.02.23 21:43:10 OpenCLTest (EURUSD,M30) SaveBitmapToFile error al abrir 'Mandelbrot.bmp'
2012.02.23 21:43:09 OpenCLTest (EURUSD,M30) SaveBitmapToFile error al abrir 'Mandelbrot.bmp'
2012.02.23 21:43:08 OpenCLTest (EURUSD,M30) SaveBitmapToFile error al abrir 'Mandelbrot.bmp'
2012.02.23 21:43:07 OpenCLTest (EURUSD,M30) SaveBitmapToFile error al abrir 'Mandelbrot.bmp'
2012.02.23 21:43:06 OpenCLTest (EURUSD,M30) SaveBitmapToFile error al abrir 'Mandelbrot.bmp'

Esto no ha ocurrido nunca antes.

// Win7 x64

 
MetaDriver:

Build 597 x64, recién instalado.

Antes no era así.

// Win7 x64.

Intenta recompilar el ejemplo. Lo he comprobado: me funciona.
 
Renat:
Prueba a recompilar el ejemplo. Lo he comprobado: me funciona.

Ya lo he recompilado cien veces. Voy a reiniciar de nuevo.

 
MetaDriver:

... Voy a reiniciar de nuevo.

No, no ayudó.

Renat:

...... Lo he comprobado: a mí me funciona.

A mí también me funciona, pero cada diez o cuarenta ciclos me sale la misma mierda:

2012.02.23 23 16:44 OpenCLTest (EURUSD,M30) SaveBitmapToFile error al abrir 'Mandelbrot.bmp'
2012.02.23 23 16:16:43 OpenCLTest (EURUSD,M30) SaveBitmapToFile error al abrir 'Mandelbrot.bmp'
2012.02.23 23 16:16:42 OpenCLTest (EURUSD,M30) SaveBitmapToFile error al abrir 'Mandelbrot.bmp'
2012.02.23 23 16:16:36 OpenCLTest (EURUSD,M30) SaveBitmapToFile error al abrir 'Mandelbrot.bmp'
 
MetaDriver:

No, no ayudó.

A mí también me funciona, pero cada diez o cuarenta ciclos me sale esta mierda:

También se descubrió.

Esto se debe a que el archivo especificado está siendo manejado en dos hilos diferentes sin sincronización y ocasionalmente el archivo se bloquea:

  1. el hilo de la secuencia de comandos sobrescribe el archivo 10 veces por segundo (depende de la velocidad de la tarjeta)
  2. El gráfico recarga la imagen en su propio hilo a petición del script

Como el ejemplo con la imagen se hizo sólo para demostrar el principio de trabajo con OpenCL, no es un problema.

Документация по MQL5: Файловые операции / FileMove
Документация по MQL5: Файловые операции / FileMove
  • www.mql5.com
Файловые операции / FileMove - Документация по MQL5
 
Renat:

Como el ejemplo con la imagen se hizo sólo para demostrar el principio de trabajo con OpenCL, no es un problema.

Estoy de acuerdo. Además, es el momento de hacer una transferencia directamente al buffer del objeto GraphLabel de todos modos. :)